2005-07-21

GNU - The Microsoft of the UN*X world

[Remark: please read 'extreme' adjectives/adverbs/pronouns like e.g. 'everyone' with an implicit "almost" in front]

GNU has produced some truly great pieces of high-quality software like gcc, binutils, emacs, screen, texinfo, GnuPG, wget... But IMHO it has some grave failures that have unfortunately become too wide-spread to become extinct soon. And it's not only these failures that are worrying me.

My main complaint here goes to the autotools suite (autoconf, automake, libtool). I have seen configure scripts break badly too many times on somewhat obscure platforms (e.g. SFU - Microsoft Services for UNIX) and not so obscure platforms. When the configure script breaks or "guesses" something wrong - God help you in trying to debug the monstruous script (some of them grow over 1MB in their size)! There are many little utilities which are smaller than their corresponding configure script.

And if you want to rewrite the original configure.in, you have to find very specific versions of auto{conf,make}. But the first obstacle you are going to face is the M4 macro processor which you have to learn to use before you even try to repair the broken configure.in.

A friend of mine (also a programmer) had once defended the autotools as being excellent and had blamed programmers who can't write proper configure.in which would work on all platforms. And his argument brings me to the title of this post.

What had made things worse for us non-Linux users, is the vast popularity of GNU/Linux. Now everyone just assumes that you are running Linux. Developers write programs that don't compile (mostly thanks to autojunk, er, sorry, autotools) on UNIX-like platforms which are not Linux. They just assume you have the GNU suite of tools or, worse, that you are running Linux. Companies develop their software only for Linux (for few very specific distributions) and usually don't support more rare platforms like FreeBSD. Some good open-source software, e.g. the Cyclone compiler I've mentioned in one of previous posts, is also Linux-only and fails to compile under FreeBSD.

The sad thing is that, when you are alrady supporting Linux, usually it isn't much trouble to support other OS-es (sometimes maybe with less features).

Do you see the similarity pattern here? Up until very recently, everone assumed that you are running Windows!

I understand that it's hard for commercial software producers to support all myriads of Linux distributions and several BSD flavors. But there is also a bunch of programmers who contribute to the 'GNU effect'. Who don't take enough effort to write a nice, truly portable program, but just assume that "everyone is GNU/Linux".

In that respect GNU has become the Microsoft equivalent of the UNIX world. You either run GNU/Linux or don't run the software you would like to. Being a BSD user, I don't like that. And no, I don't want to run Linux. If I was choosing my platform based on software availability, then I would run Windows.

I'm not a Windows user. And it has nothing to do with its price, (non-)freedom or disliking Microsoft. I could even afford myself both a legal copy of Windows and some of less-priced Microsoft's developer tools. I'm not using Windows because I don't like their philosophy - the Windows GUI "shell" is written with the assumption of a lame (er, sorry, technically inexperienced) user.

[Side note: hm, people didn't complain about DOS and I guess were more productive with DOS. I'm amazed how a 40-ish year old lady can make a correct plane-ticket reservation just typing in the mainframe console something that looks like gibberish to me.. I guess it has to do concentrating on what you're doing and not just clicking around.. but that's a theme for another post.]

Using Windows I feel like I'm running around a small 1x1 m^2 room while using UNIX is like.. well, I could compare it to piloting a shuttle - it requires great skill but you are free to do whatever you want the way you want.

[Another side note: for the same reason I dislike Java - it is crippled C++, stripped of features that Java's designers deemed "too dangerous". The result is a crippled, single-minded language playing your nanny.. But this is also a theme for another post.]

Now you probably expect of me to write why I prefer BSD to GNU/Linux. I won't. The short story: it has to do with excellent software engineering. For the long story, take a look for example here. I fully agree with everything Matt is saying in his article.

Until next post...

1 comment:

hrvoje said...

Sece covjek netom i u kakvom skrivenom zakutku naidje na tekst kojega bi trebalo uvrstiti u citanku...

Za razliku od autora, (po prirodi posla) nisam korisnik jednog OS-a; pa vjerujem da gornjem mogu dodati da ni za Linux razdiobe "autojunk alati" vec davno ne odgovaraju svrsi: raznolikost u tri glavna faktora (verzije sistemskih programa i konfiguracijskih datoteka, "domicilnost" polu-sistemskih komponenti, i organizacija korisnickih grupa/hijerarhija) izmedju razlicitih inacica Linuxa dovela je do eksplozije u onom nizu pretpostavki koje bi autor "konfiguracijske kapsule" trebao bezpogresno pogoditi da bi "stvar funkcionirala" - dok je jedna jedina pogresna pretpostavka dovoljna da se cijela struktura urusi. Sto je jos puno gore, struktura informacije je takva da je simptom pogresne pretpostavke najcesce "izronio" tek nekoliko "slojeva" iznad nje same, pa je time potraga (i eventualna ispravka) postala tako mukotrpna da u njavecem broju slucajeva nije ekonomski opravdana.

Pokusaji da je stvari poprave dodavanjem komponenti koje su sadrzane u "konfiguracijskim kapsulama" ne vodi rjesenju: struktura postaje sve to kompliciranija i time sve nestabilnija. Vrijeme je da se pregledaju temelji...