[HN Gopher] YouTubePluginReplacement.cpp: YouTube-specific code ...
___________________________________________________________________
YouTubePluginReplacement.cpp: YouTube-specific code in WebKit
Author : pcr910303
Score : 169 points
Date : 2022-09-18 15:05 UTC (7 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| evilpie wrote:
| Firefox will also rewrite YouTube embeds:
| https://searchfox.org/mozilla-central/rev/c6d17806faef8708b6....
|
| Firefox also ships a "system" add-on (https://github.com/mozilla-
| extensions/webcompat-addon) that has interventions and user-agent
| overrides for many websites. See for yourself in Firefox on
| about:compat.
| cush wrote:
| Odd that a quarter of the code is parsing the qsps
| NegativeLatency wrote:
| The video in one of the test cases is Steve Jobs commencement
| address https://www.youtube.com/v/UF8uR6Z6KLc
| tcmb wrote:
| Probably the Apple-internal version of Rickrolling.
| shadowgovt wrote:
| I'm not sure if it's still there, but for a long time there was a
| chunk of code in the Mozilla code base that hunted for several
| browser extensions in Windows every time the browser started up
| and did some patch up work in the file system to make sure that
| those extensions could be found in the browser because some older
| installers would dump them in non-standard places. This was to
| avoid the issue that if the user had already installed the
| application with the corresponding extension and it was working
| in Internet Explorer, it wouldn't automatically work in Firefox
| without this patch up process. And in that case, it wasn't the
| extension that was broken from the user's point of view... It was
| Firefox.
|
| Some technologies are so fundamental to the web experience that
| when they break, the user perceives the browser to be broken, not
| that technology.
| eastbound wrote:
| I bet the AskBar was always in the perfect standard place for
| Firefox to find it, despite being run by Oracle (Yes, Oracle
| installers for Java included the AskBar. A crime in my
| opinion).
| danielovichdk wrote:
| Most beautiful cpp code I have seen in many years
| jyap wrote:
| Probably because it's mostly if statements, neat functions and
| string translation.
| ravenstine wrote:
| It's almost as if the reason C++ can suck is actually because
| most developers write code that's incomprehensible.
| russellbeattie wrote:
| I was just about to make this same exact comment! I was half
| way down the page and thought, "Wait... What language is this
| again?" I had to scroll back up to confirm.
| JeffRats wrote:
| Clean and readable, more like C than meta filled C++ with
| templates.
| saagarjha wrote:
| Most platform vendors have this in some form or the other. WebKit
| has far more here, for example:
| https://github.com/WebKit/WebKit/blob/main/Source/WebCore/pa....
| These are cool and all for when you want software to keep
| working, but if you're the person writing these, the one thing
| you should absolutely make sure to do is reach out to the authors
| of the software you're working around to see if they are willing
| to fix their code. Most of the time they are! But I invariable
| see code go into the OS/browser/whatever and engineers bemoaning
| how they have to work super hard on backcompat, and I'm
| like..."ok, but when did you send us a bug?"
| chrismorgan wrote:
| I believe this is about allowing this kind of markup (that exists
| on old web pages that haven't been updated for a long time) to
| still work: <embed
| src="http://www.youtube.com/v/dQw4w9WgXcQ"></embed>
|
| ... by roughly translating it into <iframe
| src="http://www.youtube.com/embed/dQw4w9WgXcQ"></iframe>
|
| Probably also the <object> equivalent, maybe only that and not
| <embed>, I'm not sure. I never had a great deal to do with those
| two tags.
|
| I don't know why it has to be done this way. I'd have thought
| that without this extra code it'd roughly fall back to being an
| iframe on the original URL, and then YouTube could just check if
| it's in a frame and behave as an embed instead of the main UI.
| But there's _probably_ a reason why they've all done it this kind
| of way.
| userbinator wrote:
| It's strange that they thought of essentially taking
| responsibility for a change that _YouTube_ did to break embeds.
| capableweb wrote:
| Someone correct me if I'm wrong, but I think <embed> was used
| because it embedded a flash player, back when flash existed
| on the web. Then browsers decided to get rid of flash, and
| something had to replace it. You can't <embed> HTML pages, so
| wasn't really up to YouTube if to break it or not.
| Dwedit wrote:
| Something really really wrong just happened, I just saw an ad
| on Youtube. I didn't think that was possible.
| pknerd wrote:
| Am I the only one who actually visited this Youtube link by
| copying and pasting in address bar?
| 10000truths wrote:
| Anyone who's been on the Internet long enough will have
| wisened up to the fabled YouTube link ending in in XcQ.
| neodypsis wrote:
| > Anyone who's been on the Internet long enough will have
| wisened up to the fabled YouTube link ending in in XcQ
|
| "We've known each other for so long"
| chrismorgan wrote:
| Funny, it's the dQw that I recognise.
| mattnewton wrote:
| I didn't need to, there's only one video that makes sense,
| and the "...XcG" seemed familiar
| eastbound wrote:
| So much that the poor people who were also randomly given a
| URL finishing with XcQ can't make people read their video,
| and Youtube will need a specific exception to ensure
| generated codes don't finish with that.
| deepstack wrote:
| the all the embed tags video broke on my old site with youtube
| video embed when this was done, I just changed my code, but I
| guess a lot people probably complained. So there you go.
| jdmnd wrote:
| This is interesting. It looks like there was even some discussion
| of making this behaviour part of the standard, since it's
| implemented by all of the major browsers.
|
| https://github.com/whatwg/html/issues/2390
| DaleCurtis wrote:
| Chrome has something similar here:
| https://source.chromium.org/chromium/chromium/src/+/main:chr...
|
| We accept contributions from other sites (e.g., Vimeo,
| Dailymotion, etc) who wanted to replace their long tail of in the
| wild embeds prior to Flash removal.
| simonsarris wrote:
| Thanks for your work, Dale.
|
| IMO this was good practice to keep the web running smoothly at
| the time.
|
| It is reminiscent of Windows 95's specific code to see if
| SimCity is running, and allocate memory differently if it was.
|
| > _Jon Ross, who wrote the original version of SimCity for
| Windows 3.x, told me that he accidentally left a bug in SimCity
| where he read memory that he had just freed. Yep. It worked
| fine on Windows 3.x, because the memory never went anywhere.
| Here's the amazing part: On beta versions of Windows 95,
| SimCity wasn't working in testing. Microsoft tracked down the
| bug and added specific code to Windows 95 that looks for
| SimCity. If it finds SimCity running, it runs the memory
| allocator in a special mode that doesn't free memory right
| away. That's the kind of obsession with backward compatibility
| that made people willing to upgrade to Windows 95._
|
| from: https://www.joelonsoftware.com/2000/05/24/strategy-
| letter-ii...
| tantalor wrote:
| Yeah why fix bugs when you can just enshrine the bug as a
| feature.
|
| Backwards compatibility like this is a mistake.
| thought_alarm wrote:
| A-list apps have always received special treatment.
|
| MacOS and Windows are both full of app-specific hacks to
| ensure that misbehaving but popular apps continue to work
| between system versions.
| azinman2 wrote:
| Correct. And not even always only A list.
| bigyikes wrote:
| What you call a "mistake" is actually just having empathy
| for the user. User experience is king.
|
| It's not tech debt, it's a feature.
| tshaddox wrote:
| Surely it's both? Some technical debt can be okay just
| like some personal or corporate debt can be okay.
| DrewADesign wrote:
| Yeah... I've put well over 10k hours into writing FOSS
| and consistently encounter this attitude there, too. I
| never imagined we could get this far tolerating such
| frequent contempt for both end-users and their advocates,
| such as interface designers. If your PR poses even a
| theoretical future inconvenience to developers, good luck
| getting it merged, regardless of the user benefit. Until
| this changes, user-facing open source alternatives will
| always be alternatives rather than the standard.
| RedShift1 wrote:
| Not just devs and end users, but also devs and other
| devs. Not in rejecting pulls but changing API's like
| renaming functions, removing functions, swapping argument
| positions, changing the complete workflow of a library,
| etc... without care. The amount of breakage in the OSS
| world is just ridiculous.
|
| I'm probably biased because I deal with a lot of
| Javascript where this sort of behaviour is rampant.
| baq wrote:
| It's easy to optimize for developer convenience when you
| aren't getting paid to do the work... arguably it's the
| only way non-profit open source software can progress at
| all on average. The tails are heavy, though.
| ethbr0 wrote:
| Boxed software Microsoft: if it breaks, then Microsoft is
| wrong.
|
| FOSS and new Microsoft: if it breaks, have you tried
| pulling the latest? Yes? Then it's a bug in your
| expectations.
| tcmb wrote:
| I agree that it's empathy for the user, but I'd say it's
| a workaround, and as such it's tech debt.
| muspimerol wrote:
| A workaround does not necessitate tech debt. "Workaround"
| is a conflated term - it basically implies something
| works differently than one might expect, which is
| subjective. Anyway, what is the alternative? Saying
| "that's not my problem"? Users don't care about who is
| technically at fault, they care about a well functioning
| product.
| scarface74 wrote:
| The alternative is to let it break and force developers
| to update their software.
|
| Doing that allowed Apple to not have to maintain 32 bit
| compatibility which allowed Apple to make the operating
| system smaller (all shared libraries have to be
| duplicated including in memory) and allowed Apple to
| completely remove 32 bit support in the later ARM
| processors.
| Beltalowda wrote:
| "Tech debt" is doing things quickly now with the price
| that you have to clean up (i.e. invest more time) later,
| hence the word "debt". This is sometimes a good trade-
| off, just as financial debt is. Not everything that looks
| a bit ugly is "tech debt".
|
| And yes, it's ugly, but reality is ugly so we have to
| deal with it.
| scarface74 wrote:
| Every piece of code you write automatically becomes code
| you have to maintain. It's tech debt.
| solardev wrote:
| Those who prioritize code correctness over user experience
| will soon find themselves in that blessed paradise where
| they never have to worry about user experience anymore...
| because there are no more users.
| sn_master wrote:
| It's the difference of an OS targeted exclusively (at the
| time) for home users vs one for academia and web servers.
| dotnet00 wrote:
| Back then you couldn't just bug the game developer to issue
| an update patch, and anything significant breaking between
| Windows versions affects Windows adoption and not the
| adoption of the software the user is actually interested
| in. We see the latter even today, with Windows 8 being a
| failure for how much it changed and broke user workflows
| and Windows 11 getting a decent bit of pushback too.
|
| In a way this realization is what's finally making Linux
| viable for gaming. Instead of expecting developers to bring
| compatibility and bug fixes, have the system provide it and
| suddenly you can even have an entire gaming console
| designed for PC gaming on Linux, thus also giving you
| enough momentum for developers to make adjustments so their
| game runs better on the compatibility layer.
| scarface74 wrote:
| Microsoft made most of its money back then in two ways -
| corporations and individuals buying Windows upgrades and
| bundling Windows with new computers.
|
| If Windows got a reputation for being incompatible with
| apps, people wouldn't upgrade.
|
| iOS doesn't really have that problem. New phones are always
| going to come with new operating systems and if your app
| doesn't run on the new OS, users are going to blame the app
| developers.
|
| Also most of the incompatibility with apps and new
| operating systems comes from developers using unpublished
| APIs. Apple is very strict about not allowing developers to
| use unpublished methods [1].
|
| [1] I refuse to use the term "private APIs". An API is a
| documented method that the platform vendor documents and
| promises to support
| yusyusyus wrote:
| software distribution had a quite different model in that
| era.
| TakeBlaster16 wrote:
| If you play a lot of SimCity on Windows 3.1, then you
| upgrade to Windows 95 and SimCity stops working, who are
| you going to blame?
| mdaniel wrote:
| I would have more sympathy for that if Windows 95 were
| just suddenly dropped out of the sky to some rock music,
| but my experience with MSDN is that they are quite
| liberal with access to beta versions so _software
| vendors_ can test their products before the unwashed
| masses get it
|
| And I say this as someone who remembers the binders full
| of CDROMs that arrived, so not just "download this iso"
| modern day conveniences
| drdec wrote:
| Let's say SimCity took advantage of this beta program and
| fixed their buggy software. Great!
|
| Now how do you get that fixed software to every user who
| bought a SimCity CD or floppies? Remember, most of your
| users don't have a modem and there is no widespread
| internet infrastructure at the time of the Windows 95
| release.
| rictic wrote:
| You're arguing who is truly at fault, but as a consumer
| with less sophistication than "MSDN Subscriber" who are
| you going to blame when Win95 doesn't run your favorite
| software?
| ysavir wrote:
| We're talking early 90s. Not only were automatic updates
| not a thing, manual updates were hardly thing. If Windows
| wanted SimCity to work on their new windows release, the
| only option was to make the new windows release work with
| SimCity, not the other way around.
| markemer wrote:
| Yeah. I had this version of SimCity. It came on floppy
| disk. I had a 14.4k modem at the time (or maybe still the
| stock 2400?) the only way for MSFT to make this work was
| to add code like this. Honestly we still do it sometimes.
| Emulators routinely emulate bugs because those bugs were
| never fixed in the real systems.
| Topgamer7 wrote:
| I remember the days of burning all sorts of updates for
| software to cd or DVD
| tibbetts wrote:
| I remember the days of going down to my friends store
| because he had a modem and knew which BBSes would have
| software downloads. I had to bring my own floppy disk
| because those things cost money.
| nix23 wrote:
| But then why not let windows patch simcity, instead of
| changing the system, just asking.
| solardev wrote:
| That'd break SimCity updates, and probably trigger
| antivirus warnings, and annoy Maxis devs and lawyers...
|
| Whereas "we'll tweak our OS to suit your app to ensure it
| doesn't break with an upgrade"? That just wins loyalty
| from the game devs, users, and everyone involved except
| purist-coder types.
| scarface74 wrote:
| And it makes operating systems larger, more bug prone and
| harder to maintain.
|
| There is a reason that Apple was able to port the core of
| iOS and many of the APIs to watches, phones, tablets, set
| top boxes, monitors (the latest Apple monitor runs iOS on
| an iPhone 11 era processor with 64GB RAM).
| solardev wrote:
| Yeah, but there's also a reason why you can still run
| most Windows 95-era apps on today's PCs, vs not being
| able to run most 2-year-old games on M1 Macs. Rosetta is
| pretty amazing but it's far from actual compatibility.
|
| Apple's approach to backward compatibility is very
| different from Microsoft's.
|
| It's not uniquely a Microsoft thing, either. Nvidia's
| driver updates frequently (in fact almost always) have
| game-specific optimizations. Antivirus and firewall apps
| frequently have to make exceptions for certain apps. WINE
| and Proton operate on per-game optimizations. Input
| controller managers (like Steam's profiles) have
| different settings per game. DirectX itself does a lot of
| backward compatibility stuff, AND allow different
| versions to coexist on the same PC (vs the relatively
| tiny market that exists for Metal or Vulkan).
|
| All these things contribute to PC gaming vastly
| outselling the tiny Mac gaming market. As a Mac user, I
| wish that weren't so! But MS's approach is way better for
| devs and users in that case, even at the cost of the
| Windows APIs and libs being huge with a decades-long
| tail.
| scarface74 wrote:
| As a user of a current ARM MacBook Pro 16 inch and a
| former x86 MacBook Pro, being able to have a battery that
| last 20 hours, doesn't get hot, nor does it sound like a
| 747 when I launch Slack, I very much appreciate Apple
| being able to transition processors.
|
| Also seeing that the iOS game market dwarfs the PC game
| market in revenue and number of titles (if not quality),
| I think Apple made the right choice.
|
| Microsoft has been unsuccessful trying to get Windows on
| ARM to be viable for years before Apple did it and has
| failed partially because of the behemoth that Windows is.
|
| Speaking of Windows and backwards compatibility. There
| are at least 8 different ways to define a string in
| Windows depending on which API you are calling. String
| handling in C is one of the biggest causes of security
| vulnerabilities on any platform.
|
| https://learn.microsoft.com/en-us/cpp/text/how-to-
| convert-be...
| solardev wrote:
| I love my Macbook too, and am hoping it revitalizes the
| dead OSX games industry. But its lack of backward
| compatibility further hurts its gaming capabilities vs
| the already-limited x86 OSX games. It's nice when it does
| work and you have some M1-native titles (Baldur's Gate,
| etc.) but those are far and few in between. Sure, it's a
| great business machine, it's just not a gamer's laptop
| (even though its hardware is fully capable). I use my M1
| for most things, but still have to use Windows x86 for
| actual gaming.
|
| Yes, Windows's backward compatibility carries a high
| cost. Nobody doubts that. But as a gamer, I would rather
| to be able to play games on a shitty OS than to have the
| latest, most vertically integrated all-in-one chip and
| stellar OS and be limited to a library of like 15 five-
| year-old titles.
|
| As for the "right choice", eh, maybe from a business
| angle... but as a gamer, iOS games suck. They probably
| have that revenue mostly from lootboxes, not actual
| gameplay. I don't know that Apple should be applauded for
| turning video gaming into online gambling. That's not
| really a hardware/OS stack question anyway though, but a
| business decision. And to be fair, many of the actually
| curated titles (like the ones on Apple Arcade) are pretty
| decent -- though nothing close to the thriving indie
| scene on Steam/x86 Windows.
|
| iOS is more like a console in that they're creating a new
| market segment, not necessarily competing with
| traditional PC gaming (which has taken a turn for the
| worse by adopting mobile lootboxes and such). On the
| other hand, OSX and Linux both tried the purist gaming
| route with their own APIs and got nowhere. It took WINE
| and Proton to really make the Steam Deck a viable
| platform (and barely that).
|
| Do I like this situation? No, I'd rather just have games
| be properly cross-platform to begin with. I don't really
| understand how cross-platform works in Unreal and Unity,
| but if those engines can add native Apple Silicon support
| and make it easy for publishers to cross-publish,
| hopefully we'll see Macs on future titles alongside
| PC/PS/Xbox/Switch. Till then...
| scarface74 wrote:
| Look at where the mobile gaming revenue is today:
|
| https://www.giffgaff.com/blog/mobile-gaming-overtakes-pc-
| and...
|
| On top of that, you can carve out the percentage of "PC
| Gaming" that is "browser based" since you can run those
| on a Mac. The industry is moving toward browser based
| streaming games.
|
| https://www.marketdataforecast.com/market-reports/game-
| strea...
| anaisbetts wrote:
| The hack being described was very very old, this is
| exactly what the AppCompat system does in Windows now.
| AppCompat shims only apply to specific versions of
| specific apps (or get rolled up into "layers" which is
| what you get when you mark an app to "Run under XP
| compatibility"), and don't end up affecting other ones
| markemer wrote:
| Yep. It's just the first version of AppCompat. Now you
| get to pick a set of bugs and behaviors. It's actually a
| pretty great idea to isolate problematic software.
| nix23 wrote:
| Thanks for then explanation!!
| monocasa wrote:
| By changing the system they have a flag they can turn on
| for any applications that would be helped by a similar
| hack. It's not like use after free was a particularly
| rare event in mid 90s code.
| ysavir wrote:
| You mean, like watch for an install of SimCity, and
| modify the game's files? I don't have enough experience
| in hardware and PCs to know if that was at all possible
| or practical.
| markemer wrote:
| Honestly you could probably do it today, but back then it
| would have been a lot harder. You'd have to find every
| buggy use after free. Just easier to change the allocator
| for it. Probably how you'd do it today under emulation.
| nix23 wrote:
| >like watch for an install of SimCity, and modify the
| game's files?
|
| Yes exactly! Technically easy, a Lawyers thing maybe?
| Someone wrote:
| Could also be interesting in a world where most PCs ran
| anti-virus tools of various different vendors.
|
| Imagine Microsoft adding a magic "we're the good guys"
| handshake to their OS that would all those anti-virus
| tool say "go ahead and do whatever you want".
| siva7 wrote:
| Nowadays yes, back then this was the more reasonable
| approach
| eastbound wrote:
| My astonishment is that Microsoft _knew_ about SimCity. I was
| 15 in 1995 and I thought the world was so big that Microsoft
| couldn't possibly know about the myriad of software that
| their OS could run.
|
| It turns out the world was so small that Microsoft could,
| probably, inventory less than a hundred products that made
| 99% users happy.
| benjaminpv wrote:
| Raymond Chen talked about how periodically the devs were
| tasked with getting a handful of software purchased at
| CompUSA or w/e out of a grocery cart, opening them up,
| installing them and testing that they worked with the then-
| unreleased Win95.
| draw_down wrote:
| coldcode wrote:
| When I was at Apple in the mid 90's (Before Steve) I remember
| the Mac OS source code had tons of special app checks, mostly
| for various Microsoft (also others) apps that did odd things,
| so that older versions would keep running. When they were
| working on Copland, I thought it was nuts to write a new OS
| from scratch, but still do reimplement the hacks so that
| everything would still run. Good thing it all went away.
| peyton wrote:
| They're still there. IIRC there's a whole workflow/category
| in Radar for it.
| nikanj wrote:
| Wait, I thought the only workflow supported by radar was
| ticket filed -> ticket ignored -> product eventually EOL
| -> ticket closed
| stormbrew wrote:
| probably only a 50/50 chance it gets closed tbh. Either
| way it's in a black hole to the reporter so they'll never
| know.
|
| (I actually liked radar though, as bug trackers go - by
| far the best internal tool apple has imo)
| orblivion wrote:
| Some people here are complaining that this is a hack, technical
| debt, etc. I thought the point would be the political one, as it
| were. YouTube.com gets special treatment in a major web browser,
| whereas Sal's discount video website has to conform to standards
| like all the other plebs.
|
| It's an erosion (however minor, by itself) of the idea of an open
| standard.
| scarface74 wrote:
| Apple has a list of websites with quirks that don't support its
| "generate strong passwords" feature even though there is HTML
| spec where you can specify the types of passwords you support.
|
| https://github.com/apple/password-manager-resources
|
| Many of these sites are quite obscure.
| dopa42365 wrote:
| https://github.com/apple/password-manager-
| resources/blob/mai...
|
| For being "quite obscure", I've at least heard of most of
| these sites before. Banks with "maxlength: 8", you love to
| see it.
| masswerk wrote:
| If this goes against your philosophy, you can actually disable
| this:
|
| Develop Menu > Disable Site-specific Hacks
| eimrine wrote:
| Could you tell those who are not familiar with WebKit what this
| code actually does?
| hadrien01 wrote:
| When the first iPhone was released, YouTube used Flash instead
| of HTML5. Safari had special code to play the video with the
| native player instead of displaying a blank square. I suppose
| (from the flash-specific detection in the supportsMIMEType
| method) that this code was in charge of that logic.
| londons_explore wrote:
| Note that while the code was written in 2014 (well _after_
| the iphone was released), someone tried to remove the code
| this year[1], and gave up because some sites now rely on this
| hack.
|
| [1]: https://github.com/WebKit/WebKit/commit/049188a35af6c67f
| a30c...
| thrdbndndn wrote:
| It didn't specify which websites, now I'm curious.
| oefrha wrote:
| Of course, all observable behaviors of your system will be
| depended on by somebody.
| Anunayj wrote:
| Relevant xkcd: https://xkcd.com/1172/
| bdash wrote:
| The code was added to the public WebKit source tree, but it
| wasn't written at the time. It was upstreamed from the
| internal fork of WebKit that Apple used for iOS.
| JonathonW wrote:
| Also the youTubeFlashPluginReplacementEnabled settings
| property that it looks for to check if it's enabled seems
| like a strong hint.
| leeoniya wrote:
| hehe, now let's see all the WebKit-specific code in YouTube :D
___________________________________________________________________
(page generated 2022-09-18 23:00 UTC)