Worse is Better predates CATB by a decade and describes exactly how Unix got to where it did over the preceding decade to that. Raymond may have put a modern spin on it by comparing GCC (the original "cathedral" which, ironically, has a famously baroque and overblown design of the type alluded to in this column) to Linux, but the underlying contrast between the rigid, planned development model and the loose bolt-features-on-and-worry-about-the-bugs-later one had been made long before free software had escaped the clutches of the FSF and become the bazaar the column rails against.
Seeing as the original column was a troll, I suppose it's time to wheel out the "BSD is dying" meme. FreeBSD's supposed philosophy has been to impose some order on this allegedly out-of-control pile of gruesome hacks. If Poul-Henning Kamp thinks it's failed in its goal, then I suppose it's outlived its usefulness.
Posted Aug 20, 2012 15:18 UTC (Mon) by landley (guest, #6789)
[Link]
BSD is no more dying than Cobol is: Zombies can't die.
Kamp: A Generation Lost in the Bazaar
Posted Aug 20, 2012 16:55 UTC (Mon) by drag (subscriber, #31333)
[Link]
FreeBSD and OpenBSD are worth caring about, because both have their uses. Other variants are irrelevant. Just like how only a few Linux distros actually matter.
I wish Solaris would just curl up and die, but ZFS has it hanging on a bit longer. Oracle's Dtrace implementation on Linux is hopefully interesting and may lead to another nail in the coffin for SunOS. I strongly suspect that Oracle wouldn't mind seeing Solaris die off either.
And that is pretty much it for classic Unix systems. Between Microsoft and Linux there isn't much room left for it.
AIX and the like will still matter to some, but nobody wants to move to using those systems if they can help it. They are kinda like 'Blackbeard the pirate' during his heyday. Psychologically damaged relics of a bygone era.
Nowadays it's ridiculous to talk about portable software and not to automatically assume that you are including OS X or Windows into the discussion.
Kamp: A Generation Lost in the Bazaar
Posted Aug 20, 2012 20:07 UTC (Mon) by wahern (subscriber, #37304)
[Link]
OS X is a BSD as far as portability is concerned, but in any event is strongly POSIX compliant, and is SUSv3 certified. Part of Kemp's argument, I think, is that rather than rely on cargo cult programming practices, people should simply follow the fscking POSIX standard more closely. Rather than writing Linux software and then porting it to something else, they should write POSIX software and then make it work on Linux, etc. Usually it'll just work, because Linux, while having many non-standard interfaces, supports almost all of the standard analogs.
The elephant in the room is Windows. Compared to the differences among AIX, Linux, Solaris, OS X, FreeBSD, NetBSD, OpenBSD, etc, Windows is a completely alien dimension. The world would be much better off if more projects stopped to trying to be portable to it. It's almost always a red-headed step child in a build, and the demand seems to come entirely from developers and techies who refuse to give up Windows as their personal development environment. Instead they weigh the burden on the rest of us in the form of crappy implementations.
Supporting Windows is almost like supporting TRON, in terms of common functionality of the platform. The least-common-denominator interfaces are stuck in the 1980s, and a project makes an immense sacrifice in complexity and/or usefulness by trying to work on both. Obviously it _can_ be done, but in the vast majority of cases it probably _shouldn't_ be done.
The only standard Windows cares about is C++. They have no support for contemporary POSIX/SUS or C standards. And their fundamental approach to API design conflicts with that of Unix derivatives. I'm not saying it's better or worse, just very different. And that makes porting sophisticated software difficult, to say the least.
Kamp: A Generation Lost in the Bazaar
Posted Aug 20, 2012 20:21 UTC (Mon) by apoelstra (subscriber, #75205)
[Link]
>The elephant in the room is Windows. Compared to the differences among AIX, Linux, Solaris, OS X, FreeBSD, NetBSD, OpenBSD, etc, Windows is a completely alien dimension. The world would be much better off if more projects stopped to trying to be portable to it. It's almost always a red-headed step child in a build, and the demand seems to come entirely from developers and techies who refuse to give up Windows as their personal development environment. Instead they weigh the burden on the rest of us in the form of crappy implementations.
The reason that developers try to support Windows is to increase their userbase and (hopefully) gain more developers, because the vast majority of open-source projects are hopelessly understaffed. Nobody really likes it, or likes being portable to it. But the fact is that a lot of people use it, and if we're writing software for people to use, we need to support it.
The fact that these developers -don't- use Windows as their personal development environment is the reason that implementations are so crappy.
Kamp: A Generation Lost in the Bazaar
Posted Aug 20, 2012 21:20 UTC (Mon) by Cyberax (✭ supporter ✭, #52523)
[Link]
People whining about POSIX should just shut up. POSIX is by now a small part of the whole system. About the only thing you can write strictly within POSIX are mail daemons (well, maybe also ftp daemons). Almost everything else would need system-specific bits.
And that's OK, because otherwise there'd be no need for different operating system. We'd just all happily use One True Faceless OS.
And I also disagree about Windows being a horrible OS for build systems. It's actually a GREAT OS for build systems because it forces you to avoid hacky shortcuts like assuming that /usr/include always has all the relevant libraries or always installing binaries into /usr/bin.
Kamp: A Generation Lost in the Bazaar
Posted Aug 21, 2012 13:14 UTC (Tue) by Wol (guest, #4433)
[Link]
Don't tell that to the LibreOffice folks.
Last I heard, and I'm sure it's speeded up since then, a "make clean, make" took A WEEK on an 8-core Windows monster.
My 3-core gentoo box takes a couple of hours.
Cheers,
Wol
Kamp: A Generation Lost in the Bazaar
Posted Aug 21, 2012 14:43 UTC (Tue) by Cyberax (✭ supporter ✭, #52523)
[Link]
Again, that's probably an issue with their build system. MSVC really really wants you to pass it several files at once. If you do this, then it becomes several times faster than GCC on simple C/C++ code.
Kamp: A Generation Lost in the Bazaar
Posted Aug 21, 2012 19:21 UTC (Tue) by knico (guest, #67323)
[Link]
If the files are local to the machine yes, Windows builds can be very fast.
If your files are on a network drive, Windows builds are very, very slow. Visual Studio seems to have huge network latencies due to its sub-optimal dependency checking.
Kamp: A Generation Lost in the Bazaar
Posted Aug 20, 2012 21:39 UTC (Mon) by epa (subscriber, #39769)
[Link]
It doesn't matter much that Mac OS X is POSIX compliant or certified, since POSIX and Unix(tm) don't standardize any user interface - or at least not any UI that a user-facing application would want to use. Libraries like Qt go a long way towards a cross-platform interface for writing applications, but there still remains a lot of work to port and maintain your program from Linux to Mac, or vice versa.
Kamp: A Generation Lost in the Bazaar
Posted Aug 20, 2012 22:48 UTC (Mon) by drag (subscriber, #31333)
[Link]
> Windows is a completely alien dimension.
Actually it's not. Microsoft started off as a Unix vendor and even though it has a lot of VMS influences the Unix influence definitely shines through.
It's certainly a lot more Unix-like then, say, AS/400 or VSE/ESA. Ever used a thirty-_ONE_ bit operating system? I have. It's not pleasant.
>They have no support for contemporary POSIX/SUS or C standards.
Actually Microsoft Windows does have POSIX/SUS support.
The NT kernel has the ability to support multiple 'userspace personalities'. This is a side effect of it's layered 'Hybrid Microkernel' design with internal APIs and message passing. Originally it only supported the NT userland. Later one, with windows 2000, win32 support was added. POSIX is just yet another 'native' userland API that is supported by Microsoft Windows.
Numerous government entities have POSIX requirements for operating systems.. In order to get contracts with those entities Microsoft must provide a POSIX operating system. Microsoft does this previously through SFU in the past and now through SUA.
One of the options you get for the higher priced versions of Windows Visa and Windows 7 is that they can be effectively a Unix operating system, depending on your specific configuration. Of course nobody gives a flying flick about POSIX so it's being depreciated in Windows 8.
Maybe this will help put the whole 'POSIX' thing into perspective. Maybe not.
If POSIX is all that important then why are not people using native BSD-style user-land that Microsoft offers rather then trying to shoe-horn a Linux environment via third-party win32 binary? (aka Cygwin or other proprietary competitors) The answer, it seems, is that it's a lot easier to ignore POSIX completely if you are aiming for portability.
Kamp: A Generation Lost in the Bazaar
Posted Aug 21, 2012 0:27 UTC (Tue) by wahern (subscriber, #37304)
[Link]
Windows' POSIX support is circa 1988. What I mean, for example, is that Windows API designs tend to leverage threads and callbacks, while Unix uses readiness notification through file descriptors. There are big differences between those two paradigms, and bridging them requires a lot of bug prone boilerplate code.
That's just one example. I18N and L10N is another. The list goes on-and-on.
The best way for an application to simultaneously support Unix and Windows is to not support it for those components which heavily rely on system-specific features. That particularly applies to GUI software.
The problem is that people try to design highly detailed, portable interfaces, when instead of thinking about small details they should think big. That is, break out huge chunks of the application and develop them in parallel, but separately. Trying to write them "portably" as one cohesive whole is foolhardy.
Same logic applies to the build environment. Trying to write or find the "one build system to rule them all" is a fool's errand. You can do better than autotools or CMake by simply not trying to accomplish what those two tools ultimately fail to do. Not developing the Windows portion of a GUI application completely in Visual Studio is just asking for endless and unnecessary headaches.
Point being, if you don't mix portable and non-portable code, you don't really need a complex, "portable" build solution.
Kamp: A Generation Lost in the Bazaar
Posted Aug 21, 2012 0:36 UTC (Tue) by wahern (subscriber, #37304)
[Link]
People don't use WIndows SUA because it's not installed by default. The purpose of writing Windows software is, presumably, so other Windows users can run it, not only so other people with SUA can run it.
Windows is presumably dropping their ancient POSIX support for the same reason they've never supported newer C versions and perhaps for the same reason their commitment to C# was so short lived--because their management team doesn't really care about anything other than the old Win32 API which keeps vendors locked in to the platform.
Supporting POSIX or C isn't going to draw people to the platform, it'll just make everybody else's life easier. Attempt to support newer C++ features is what will help draw and keep developers, as will their typical overhyped promises about an SDK/API revolution in the next Windows product.
Kamp: A Generation Lost in the Bazaar
Posted Aug 23, 2012 5:38 UTC (Thu) by quotemstr (subscriber, #45331)
[Link]
> perhaps for the same reason their commitment to C# was so short lived
C# commitment? Short-lived? Says who? All the new stuff supports C# as much as it supports JavaScript and C++.
Kamp: A Generation Lost in the Bazaar
Posted Aug 21, 2012 9:54 UTC (Tue) by tialaramex (subscriber, #21167)
[Link]
You seem to have only the vaguest idea what was going on with NT and personalities, so I guess it might help to fix some of that before we get to the "Why" part
- There is no real "NT userland". The NT-specific stuff all lives below the personalities, and is thus accessible from all of them. Unlike a Unix Microsoft does not officially document and support the system call interface to their kernel.
- Win32 originates in Windows NT (although obviously the design owes plenty to Win16) and was present as a personality essentially from the platform début. This is the "native" personality of NT operating systems, and the one with access to all the nice toys invented in the last 25 years.
- The original POSIX and OS/2 subsystems date to the early 1990s too.
You're correct that POSIX is present because it was felt to be advantageous in contract negotiations. You would be wrong if you imagined that Microsoft intended /anyone/ to use this interface. It's drastically hobbled, implementing only a bare minimum of POSIX features and serving to demonstrate (as someone has commented above) that POSIX is "useless" because it doesn't specify enough to build much real software. BSD sockets, for example, are not a mandatory POSIX feature, and thus Microsoft omits them. Likewise X is not present, nor is any alternative Unix-like windowing system.
The OS/2 personality is there for the same reason. It's a checkbox item. Can this all-singing all-dancing NT run our old OS/2 software? Yes says the salesman. Then the NT stuff is installed, the OS/2 app doesn't work, and Microsoft explains that oops, that's using an unsupported API but hey, one of the many Windows ISVs will be happy to offer you an alternative that does run on NT.
Services For Unix isn't an evolution of the POSIX personality. It's Microsoft reluctantly accepting the reality that people wanted to actually _run_ Linux software (hence all the GNU utilities) on their expensive NT systems and that all too often now the IT management is present when the salesman makes his pitch and will laugh uncontrollably if the POSIX personality is mentioned. They needed a new pig, as my old CEO would say. So they bought Interix (which is what customers who desperately needed this stuff to actually work had been using instead of the POSIX personality) and renamed it SFU (I'm surprised they couldn't find an excuse to insert a 'T' in that abbreviation) but of course they've essentially allowed it to stagnate so that it's becoming irrelevant again.
It's a mistake to imagine that NT's innards resemble those of a Unix at all. It's similarly _capable_ but that's all. Roughly everything you can do on Linux from a certain era you can also do on NT from that era. But the /way/ you do them is very different. There is a different philosophy at work in the Microsoft kernel team than in Linus' project.
Today the Microsoft salesman will deflect questions about cross platform compatibility by suggesting that you can run all your "legacy" (ie non-Microsoft) software in a virtual machine. If you're dumb enough to fall for that, you deserve everything you will get.
Microsoft cross-platform
Posted Aug 21, 2012 13:39 UTC (Tue) by Wol (guest, #4433)
[Link]
Actually means your old Windows software will run on your new Windows.
Which may be true for stuff MS wrote, but I have problems running WordPerfect on XP, and on 7 it won't even think of installing!
Cheers,
Wol
Microsoft cross-platform
Posted Aug 22, 2012 12:09 UTC (Wed) by vonbrand (subscriber, #4458)
[Link]
It's not. A MSFT written game (forgot details) for Win98 which exactly met WinNT 4.0's specifications wouldn't make it past its splash screen.
Microsoft cross-platform
Posted Aug 22, 2012 15:01 UTC (Wed) by cortana (subscriber, #24596)
[Link]
IIRC, DirectX on NT 4 never made it past version 2, so it's not surprising that a game written by MS (and hence one that probably relied on the latest DirectX) wouldn't work.
Kamp: A Generation Lost in the Bazaar
Posted Aug 22, 2012 8:42 UTC (Wed) by drag (subscriber, #31333)
[Link]
> BSD sockets, for example, are not a mandatory POSIX feature, and thus Microsoft omits them.
Microsoft SUA supports BSD sockets. In Ipv6, no less. But that's neither here nor there and thanks for the mini lesson on NT personalities. I am not a NT guy.
I am sure that we all can agree at this point that POSIX has no relevance any more if your concern is about portable software. It still may be useful for some API lawyering, but besides that it is entirely insufficient for most software.
Kamp: A Generation Lost in the Bazaar
Posted Aug 23, 2012 5:35 UTC (Thu) by quotemstr (subscriber, #45331)
[Link]
> Supporting Windows is almost like supporting TRON
You think that's bad? Emacs still has a fully-maintained DOS build. Not too long ago, we had a long discussion about 8.3 filenames.
AIX is dying too ...
Posted Aug 21, 2012 13:11 UTC (Tue) by Wol (guest, #4433)
[Link]
From what I can make out, IBM's attitude is "linux is going to replace it. If customers are happy to pay us to maintain it, we're happy to take their money".
But AIX is now very definitely a profit centre. When it can no longer compete in customers' minds, and starts losing money, it will be gone.
Cheers,
Wol
AIX is dying too ...
Posted Aug 21, 2012 13:59 UTC (Tue) by drag (subscriber, #31333)
[Link]
> But AIX is now very definitely a profit centre. When it can no longer compete in customers' minds, and starts losing money, it will be gone.
It's hella expensive to migrate away from it. Just like any enterprise platform that a large-ish corp depends on for core functionality. The time and money it will take for most companies to move away from AIX far outstrips the cost of keeping it.
(Not to also mention the risk to your career if you decide to take something that is working and replace it with something that is cheaper... only to find the new solution doesn't work.)
IBM knows this and sets up licensing accordingly and will continue to make a killing for a very long time.
If it wasn't for this fact 'big iron unix' would of been dead years ago, I expect.
AIX is dying too ...
Posted Aug 21, 2012 17:46 UTC (Tue) by dgm (subscriber, #49227)
[Link]
AIX will die, not because enterprises migrate away from it, but because no new projects are going to be started on it. Eventually all of the old projects will be replaced by something bigger, faster, more integrated and/or more "cloudy".
AIX is dying too ...
Posted Aug 21, 2012 18:03 UTC (Tue) by dark (subscriber, #8483)
[Link]
But "eventually" could easily be decades, as we found out in the runup to Y2k :) I guess we'll see what's left in 2038.