Where is the mess? Everywhere: sound, video, embedding, etc.
Where is the mess? Everywhere: sound, video, embedding, etc.
Posted Oct 20, 2008 8:36 UTC (Mon) by khim (subscriber, #9252)In reply to: 64bit platforms? Huge market, yes. Pure 64bit platforms without 32bit support? Don't make me laugh... by quotemstr
Parent article: Linux now an equal Flash player (Linux-Watch)
I'd argue that Win32 is a horrible mess, actually, filled with compatibility kludges, automagical common control versioning, silently redirected writes to parts of the filesystem namespace, and so on.
You are looking on the system from the POV of system developer. From POV of application developer lack of said automagical versioning is a mess.
Why? Some examples.
Sound. How well OSS emulation is working today? Oh, right, OSS API was a mess and so it can not be adequately supported. Now everyone must rewrite everything for ALSA... or may be GStreamer... or may be PulseAudio...
Video. There are just two interfaces: V4L and V4L2. So if I don't need the features I can safely use V4L, right? Oh, no backward compatibility... Ok, I'll use V4L2... What? No support for some devices? So I must support both? What a mess... (Note: AFAIK this particular mess was cleaned up and now most devices support V4L2 - but for years the situation was as described).
Widgets. Can I embed Qt widget in a GTK program? No? Why No? Ok. At least GTK widgets are usable in Qt (not so long ago this was impossible too).
Remember the ire Windows users directed on Microsoft for discontinuing VB6? It was supported for ten years before Visual Fred replaced it! In Linux such tectonic shifts (when you can not use old APIs anymore) happen once per year or two. And rarely developers offer support for "obsolete" technologies. The only one lib which actually supports old APIs is GLibC - yes, there are occasional glitches, but you can still take old program from the era where files were limited to 2GiB and it'll work. Oh and linux kernel itself is pretty good at keeping things backward compatible... unless you'll count aforementioned "big switches" like OSS->ALSA transition or V4L->V4L2 transitions.
Transitions in Windows are handles in the sane way (from the POV of
everyone who's not system developer):
1. APIv1 is introduced.
2. APIv2 is introduces some years later. APIv1 is still usable and for a
few years you can safely ignore APIv2.
3. APIv1 is declared deprecated and developers are encouraged to switch to
APIv2.
4. Few years later APIv1 is... removed? no! frozen: you can still use
APIv1, but some features are not available.
5. Finally, 10-15 years down the road APIv1 is removed.
If there are APIv3 or APIv4 introduced along the way - it means at some point you'll have concurrect support for three or four versions of API...
In linux it's done "in clean way":
1. APIv1 is introduced.
2. APIv2 is introduced some years later. Now you must support both
APIv1 and APIv2. Because they don't play well on the same system and you
never know when particular distributions will switch from APIv1 to
APIv2.
3. APIv1 is removed.
This is the best way to scare away ISVs and "normal" users. Who just want to use the system and not think about versions of kernel, GLibC and GTK. Who want to select API to support all currect systems (say: 2-3years old) and future systems (again: 2-3years in the future). Why this limits? It's easy: PCs average lifespan is 2-3 years. And you want your application be available for everyone who's currently using PC. So Any API must be supported for at least five years (ten is better) and for at least three years after replacement is introduced (five is better).
Situation is slowly changing - but it's still far from being equal to Windows. Actually friedliness to ISV is almost directly proportional to market share: Linux is 1% (because of the aforementioned problems), Mac OS is 5-10% (it's better then Windows, but it still likes to do things like drop support for Carbon when 100% incompatible replacement was only available for eight years), and the rest is Windows (which is horrible in many ways but has excellent backward compatibility).
Remember: Joe Average does not care as much for "cleannes of the architecture" - but he does care about his ability ro use old software. And ISVs like to produce software which till PC lasts. This is not an option in current Linux ecosystem - unless you'll ignore it and go with separate abstraction layer (JDK, for example).
