i read ian murdock's blog entry on the importance of backwards compatibility i found myself at once agreeing and wincing.
i agree that backwards compatibility is down right important, particularly for our users not to mention third party developers. the example ian used from joel's blog about sim city causing microsoft to patch their allocator so it behaved differently just for that one app (!!!) is so amazingly bad, though, that it's a bit unfortunate. a number of the comments on his blog got sidetracked by this poor choice of an example.
however, backwards compatibility, like most things in life, is neither all good or all bad. (dualism: blech!) with all the upside of it, there's also the drawbacks that come with it. namely increased engineering costs due to increased complexity of both development and testing, greater exposure to security risks and a real stunting of innovation since you can't just change things willy nilly.
we all want quickly developing, solid and innovative software ... but we also want backwards compatibility. how do we get both? that's a very good question.
this is an interesting conversation right now for kde as we're about to screw the backwards compat pooch with the release of 4.0 since there are so many api changes. for third party developers, the api changes will require changes to their source code. we've tried to limit the pain with documentation and tools but let's face it: kde4 isn't backwards compatible with kde3 and that's not the nicest thing if you are a third party developer.
fortunately, however, you should be able to run kde3 and kde4 apps side by side just as running kde1 apps alongside kde2 apps was possible. this addresses much of the issue for our users, at the cost of additional memory usage and disk space consumed.
so why do we do not just stay the conservative route? because we can provide a significantly better experience for both application developers and users.
at the same time we strive to provide binary compat throughout major revisions of our public API. we've messed up once or twice in the past on this, but generally we've done pretty well. so it's not like we don't care, we just see the both/and rather than only an either/or =)
that said, i think it would be really interesting for ian to point out some of the hot points of incompatibility that he sees and has to deal with. concrete examples are so much easier to work with than abstract philosophical meanderings.
for instance, g++'s incompatibilities year after year were insanely difficult to live with. that seems to be better now and, i'm hoping, all but solved so we won't have to deal with this nightmare in the future as we have in the past.
distros that swap bits and pieces about which results in unpredictable levels of quality and loss of knowledge investment for users are also maddening.
then again, in each of these scenarios there were often good reasons for taking the path that was taken. simply switching to a conservative methodology of backwards compatibility would address one set of issues and deliver us another.
perhaps we can find ways to evolve a system while keeping compatibility over time. you know, something in the middle. a middle way. =)
Tuesday, January 16, 2007
Subscribe to:
Post Comments (Atom)

7 comments:
i wasn't very fond of ian's example as well, mostly because i think microsoft's bad performance in terms off innovation, speed, stability and security is for a large part due to their keeping backwards compatibility to an insane extend...
but breaking it twice a day isn't very usefull either. but - i think KDE did things right. as you noticed, it's mostly gcc breaking stuff...
Yer, I've always found the issue of backwards compatibility interesting, and wondered just how the open source world would handle it if and when ISVs and developers get more plentiful. I suppose though that if demand is still there for a particular set of libraries to make many applications work (right back to the age of something like Windows 3.1), then that demand will filter down. That's what I believe would, and will, happen.
These days, I have went through a major kernel change without noticing and my Loki games of several years ago still work, so it's working for me. Hell, Linux binaries work on BSD, which just shows you that the whole issue doesn't have to be as complicated as Microsoft has made out. The GCC C++ compiler has always been a problem though. I suppose everyone just wonders how this might work at the desktop level.
As someone involved with the LSB, I'm glad that Ian is taking it seriously. In the past I haven't seen much point in the LSB to be honest, but backwards compatibility is a real issue.
the example ian used from joel's blog about sim city causing microsoft to patch their allocator so it behaved differently just for that one app (!!!) is so amazingly bad
Sadly, it is just one of many such hoops that Microsoft has jumped through that make you think "Just why did they need to do that?" Is it simply the ISV, or is it the development tools or the libraries or what?
I'm certainly not above saying that Microsoft has placed a high priority on backwards compatibility over the years, and more so than companies like Apple. God, I wouldn't like to have a lot of apps running on OS X. These days, things seem to be changing. The other biggy in Joel's blog was the stupid non-compatibility of VB 6 in Visual Studio.Net. I mean, for Gods sake, do something like reimplement classical VB in .Net so that people can at least recompile, but don't give people an object oriented environment they don't want and can't use. Very, very, very few classical VB applications have been ported to VB.Net (who wants that job?), devaluing the new platform. VB.Net is essentially useless anyway, because it's just a syntactically different version of C#. It isn't VB and it isn't RAD development.
However, the way that Microsoft has gone about organising for backwards compatibility, and from what I can get from a couple of people who worked at Microsoft, leaves me scratching my head somewhat. The compatibility DLLs in Windows 9x were a case in point, as well as the need for things like WinSxS (a hacked on system for side-by-side DLL installation).
I mean, in that example, why couldn't they have just created a DOS environment, or something like DOSBox for Windows 2000/XP, to run their applications in a modularised way? I can't say they make their lives easy.
perhaps we can find ways to evolve a system while keeping compatibility over time. you know, something in the middle. a middle way.
Well yer. You modularise your system so that you can have your newer apps use the newer libraries, and your older apps use the older libraries, which are still installed. You then try and integrate your older libraries with your newer ones (kde3 with kde4 for example, or WINE with kde4!) so that your older applications can take advantage of newer features for free!
This is possibly the most important point, as it is easy to simply leave older libs installed. Getting the old stuff to work OK when you are using the new stuff, and making it easy on yourself to achieve it in a sane manner (without AppCompatibility sections of a registry), is the important bit.
Is it possible to create a wrapper around Qt4 that exposes the Qt3 API? Ditto for KDE. (worst thing I can think of is dcop->dbus...)
I guess I have to be the first to mention the kernel driver interfaces. g++ is the other big example, as noted.
The main thing is for your old stuff to keep working. If that means keeping the older versions of libraries around, that's perfectly fine, disk space is cheap. (Microsoft does it similarly -- add new APIs all the time, never remove old ones).
The other thing which would be very nice is cross compatibility -- so that, provided the architecture is the same and the dependencies are present, you could run a binary from one distro on any other. I expect Hell will have to acquire a couple of further sheets of ice before that ever happens, though.
IMO breaking backwards compatibility in KDE 4, but allowing KDE 3 apps to run at the cost of additional memory and disk space is a reasonable compromise. I'd rather see advancement in the architecture and am very willing to trade off some resources in older apps to get it.
Chad
http://linuxappfinder.com
@troy: no, that's not a realistic possibility.
@Illisius: yeah, the kernel is quite the moving target; they have a stronger case for that mode of operation than probably any other project i've seen though (rapid evolution and performance guarantees).
as for binaries that run on more than one system, that's what the lsb and static linking is there for. it's still a bit annoying to use from an ISV's perspective but it is getting there and does work.
even without an LSB build i've taken binaries from a suse machine and run them on a fedora machine before; or the other way around. forget which, but they were completely different distros. so it is possible if things align nicely.
Take a gander at the response (more of a series of musings) I wrote to Ian's article.
It even mentions a KDE 1 app.
Post a Comment