DISCLAIMER: This site is a mirror of original one that was once available at http://iki.fi/~tuomov/b/


1. I have now been using Windows XP for the past four months plus after some 14 years of almost exclusive use, and, lately, suffering of Linux. As promised, here is the story of my experiences with Windows XP, and the conclusion to the question: Defection?

I opted for XP instead of Vista primarily because the latter is far too bloated for my meagre computer from more civilised times. Windows 7 might be better, but it is not here yet – or was not anyway when I got the computer – and getting a new system running is more pain than I regularly like to deal with. So, as it was with my switch away from Linux, that only happened after I needed to switch to a laptop, I would only do it if I really had to, or switched to new hardware.

The first days were not the easiest. Although I have a valid license sticker on the bottom of my 4-year-old second-hand laptop (due to the shallowscreen pandemic), I had to resort to warez for the installation media. There were problems with OEM license keys not being compatible with retail installation media, so the installation did not go entirely smoothly at first. But with the right OEM media finally at hand, there were no problems.

Out of the box, Windows Just Works, unlike, e.g., Unbuntu, but it is very crippled. It demands quite a bit of work to make it a nice environment. But it is stable, and the next update will not break it, unlike Linux lately, where the amount of work to configure the most basic things keeps increasing at the same time as the system keeps becoming more and more complex and unstable, in both senses.

2. The most glaring Windows disability is its keyboard support: WIMP aside, standard keyboard layouts are awful (but it is becoming increasingly more difficult to use anything else on Linux too). Windows is missing decent text editing bindings (but so is post-Gnomification Linux). Dead keys suck, and Windows is missing a proper Compose key.

The first one of these is quite easy to solve, although it appears you need two programs to do it. First, you have to use a hack that changes the registry to remap the utterly useless Caps Lock as Control. I managed to do that with SharpKeys. Then you have to create a custom layout for symbol keys. That can be done with MSKLC (Microsoft Keyboard Layout Creator). While not as nice as Xmodmap, kittens can play and sleep safely, unlike when letting Xkb loose.

The next two aspects of keyboard support disability – editing bindings and Compose key – are more difficult to solve, and I have not managed to do that entirely satisfactorily. With MSKLC it is possible to add dead keys behind AltGr, to almost emulate Compose with dead AltGr+accent, but it is a lot of effort to add a lot of such keys. A site explaining this offers some layouts, but of course they're based on wrong language keyboards, so you'd still need to to go through a lot of trouble recreating that part of the layout. AccentComposer is a slightly better approach, although a dirty kludge and crippleware. It also suffers from the problem that you cannot use the same key in an X server for Compose, grabbing it in a low-level hook. That said, my T43 does not really have enough modifier keys for Compose, as right Control I have already given up as the Windows key – which comes useful in Windows – and left Control does still sometimes come useful even with AltGr as Control. I think I prefer to not have “proper” Windows and Menu keys on a small laptop keyboard, however, as Alt becomes very small then.

In the department of dirty kludges, xkeymacs is another very distasteful example. It tries to provide emacs-style editing bindings in Windows. From what I have gathered, It does this basically by trying to know a lot about different softwares' key processing, and wrapping them. eugh. It also is missing such a fundamental function as kill-line, or even kill-to-bol. For some reason, emacsites think kill-line really means kill-to-eol. Utterly twisted folks. And, yet, kill-the-whole-fucking-line is essential for clearing input boxes, etc.

So, xkeymacs is too kludgy and does not provide what I need, so I do not use it. I mostly deal with the lack of decent editing bindings in Windows by living with it in random applications where I do not need to edit text much, and using configurable applications where I do. These include primarily the text editor, my choice being joe, the command shell, as well as the browser address bar. Fortunately Opera lets me configure itself to use my custom unix-style bindings, unlike certain popular FOSS offering. The situation is not really that different from the one I was in on Linux. Sure, the (pre-Gnomification) de facto standard emacs-like bindings are much better than mostly useless (post-Gnomification) Windows-type bindings, where quickly accessible key combinations like Control-P are wasted on once-a-day printing tasks, while you have to locate and move your hand to the cumbersome cursor key block once every minute when editing text. But even on Linux I used different bindings in my text editor than in other programs, because it would have been too much pain to configure other programs to use the joe bindings that have grown into my spine.

On the issue of general integration of Ion and an X server with Windows, I first let X grab Alt-Tab, and used it in Ion for window switching. Unfortunately, the X included in Cygwin is too stupid and grabs the Windows-key as well, which I did not need it to do. So there was no key binding to switch away from X. I tried to work around this by using TaskSwitchXP, which provided some nice functionality through its Alt-Tab menu, and also let one create other bindings that remained accessible while X was focused. Unfortunately, TaskSwitchXP had some display and focus problems, so I did not stick with it. Instead, I just rebound Mod1+Tab to Mod1+Q in Ion, and stopped X from grabbing any keys. That setup has worked fine, and reflects the fact that in Windows, Ion has become mostly just an IDE for me, where I run only xterms and the occasional xdvi and xpdf for viewing what I am working on. With Ion as the development or work environment, I also do not miss multiple workspaces in Windows itself (although achievable with add-ons if desired).

With regard to Windows' keyboard support, the final issue is the general WIMPyness of the entire OS. The fundamental neglect of the keyboard in the UI design is even reflected in the popular use of the term “shortcut” rather than “binding”. The term “shortcut” implies an afterthought. I probably could not bear with Windows for anything serious if I had to use a standard mouse, let alone a touch-or-even-approach-me-and-unleash-hell-pad. But the Trackpoint – or nipple mouse – is different. It is basically an integral part of the keyboard, and makes life in Windows surprisingly tolerable. For simple tasks, I find myself wishing for key bindings much less often than with the RSI-device. However, even the Trackpoint fails when tasks become complicated enough to require tedious repetitive hunting and pecking; a few simple grunts and pointing at things can express only so little, after that language has to evolve.

Windows' start menu in particular is quite useless, being cluttered with far too much stuff. A nicer application launcher was thus a necessity. Something that lets you type the application name with auto-completion. There are quite a few of these, but none very good. I used Colibri for a while, which worked otherwise quite well, but was far too slow. After it I have settled for FARR (Find And Run Robot), which seems slightly faster, but still far too slow and bloated. How hard can it be to efficiently cache the available executables? The rest were even worse. The rather popular Enso is quite nice and minimalistic in style, but it is not primarily a launcher, and running a program by typing the command run after hitting a binding to activate Enso itself, is too many keys. (The Enso types actually oppose modal interfaces, and by default Enso is activated by keeping Caps Lock pressed. I have no Caps Lock – the key with such printing on it is mapped Control as it properly should be – and no other free keys at a comfortable location for holding down while typing.)

[Update: a newer version of Colibri, pointed out to me by a reader, seems very fast so far.]

3. A keyboard application launcher is, of course, no substitute for a decent command shell, and the next step was installing one. In practise that meant a POSIX layer, as Windows PowerShell, while with some nice ideas, does not seem very good for ad hoc command line work, being rather a scripting environment – foremost due to the off-putting terminal emulator with practically no editing capabilities. The obvious and apparently most popular choice is Cygwin, and there really are not that many maintained alternatives to be taken half seriously.

It turns out that even in Windows FOSS crap still remains the biggest source of frustration, and replacing some of the few semi-decent pieces of FOSSware that failed to work well under Cygwin or Windows, has been, and remains, a major hurdle.

Still, after all these years, Cygwin remains seriously crippled. Particularly multibyte encoding/locale support, i.e., in practise UTF-8 support, remains broken. It is not there in 1.5 at all, and in 1.7 – which was still a “hidden” development version in the spring 2009 – it only works partially in some programs after a lot of effort. Ion is one in which it does not, most likely due to Xlib not working together with libc – other X programs that I use and could do with the support, i.e., xterm, do not use the locale support mechanisms of X to such an extent. Well, xterm matters the most, but the support remains crippled. After a Cygwin update made a while before starting to write this essay, Python was also broken, although it (or eyeD3 and Duplicity anyway) used to work earlier. Idiotic applications and OS-wannabe languages with internal mangling instead of trusting the locale subsystem to do its thing.

Another issue with Cygwin is that it is dog-slow. Shell scripts that do a lot of execution of other commands become quite useless; it is better to rewrite scripts in a proper scripting language. But even a simple rsync of a DVD on a local disk takes approximately twice as long as Microsoft's robocopy (25min vs. one hour). So, although providing a sufficient POSIX shell environment for simple day-to-day operations, Cygwin is completely insufficient when execution time starts to matter.

Other FOSS/Cygwin failures include GHC, Darcs, and Ikiwiki. A couple of years' old version of Ikiwiki that I had been using on Linux, tripped on its own excessive UTF-8 assumptions and mangling, instead of passing data through as-is. I obviously decided to try a recent release, fearing that it will be incompatible with my custom plugins etc. But I never got far enough to test that hypothesis, as it failed to build/install/run at all. Thus I had to convert my Ion site to another Web engine.

There is a version of Darcs for Windows, but it is worthless, as it does not integrate well with the Cygwin POSIX shell. It is missing readline functionality, and it reacts to Control-C poorly without cleaning up locks. It prints time zones of the form ‘FLE Daylight Time’ instead of simple abbreviations like ‘EEST’, and this causes problems with programs trying to parse its output – including those for converting to other version control systems, as well as some of my custom scripts. Also setting the TZ environment variable in bash makes the Windows Darcs go totally nuts, although it should not even be aware of Cygwin. Yet it does require Cygwin to build itself.

Aside from these integration issues, the provided semi-native Windows build of Darcs is also dog-slow, and apparently buggy, as it keeps ‘reading pristine’ all the time. Thus, due to these problems with the provided Windows Darcs binary, I wanted to build a Cygwin POSIX binary of Darcs. Unfortunately, Darcs is written in Haskell and depends on GHC, or Glasgow Haskell Compiler; yet another Modern Language compiler suite suffering from a severe case of the penis-envy, wanting to become an operating system. It happens that there is no binary of GHC provided for Cygwin, and one also can not be built easily due to bootstrapping complications. Both of these FOSS “communities” were mostly unhelpful.

So, I had to abandon Darcs, and switch to an otherwise inferior version control system that at least integrates with Cygwin. I have started to use Mercurial for my new repositories, although conversion of older projects seems to be becoming an eternity-project, as it is not easy to preserve interoperability of multiple repositories, and broken darcs means broken conversion tools. Just like with all FOSS distributed version control systems except Darcs, the problem I have with Mercurial is that they have devoted at most a single brain cell to UI design. Despite all its other failings, the UI is what Darcs has got almost perfectly. Interactive, helpful, and with good memory.

With Darcs, to clone a template repository as a working copy, and finally put a modified working copy in a central archive directory later automatically used by push from the working copy, you only have to get template foo and put foo archive. With Mercurial, Bazaar & co., you have to clone template foo, clone foo archive and, finally, $EDITOR foo/.hg/hgrc to set the default push location. As Mercurial & co. automatically set the default push location on newly cloned repositories only, if you forget the last step, and run hg push in foo, this will push your changes to the template repository, no questions asked. This severely brain dead design decision has ruined my repositories many times already. Instead of the software defaulting to preventing disaster, you're supposed to remember to do extra manual work and check what would be done with hg outgoing before a push. The push command of Darcs, by contrast, is interactive unless specifically instructed otherwise, and includes the functionality of outgoing, showing what would be pushed and where. And Darcs' push and pull, of course, change the default location, so in situations as above, the location will be correct anyway, unlike with Mercurial & co.

Not directly related to Cygwin or Windows, other FOSS failures include Duplicity and Duplicati. For a regular full system backups I have settled for the IBM/Lenovo Rescue & Recovery software, but for frequent – possibly many times a day – on-the-go backups of important data on a USB stick, I had been using Duplicity in Cygwin, succesfully for a while. Then one day, on the train, I ran into a severe bug that makes Duplicity completely unusable in this application. It does something idiotic that causes the number of file handles available – in the thousands – to limit the number of consecutive incremental backups to around a dozen or two. Sorry, but this frequent full backups require far too much space and time. Additionally the recent Cygwin/Python update broke handling of filenames beyond ASCII. Duplicati is a Windows clone of Duplicity that I tried while working on this essay – and trying to make backups of it. It seemed at least faster than Duplicity. Too bad it is also totally broken, although claimed to be at “1.0”. It dies randomly on “illegal file names”, without even indicating the purported offender; its filters do not work, it misses files its interactive filter editor claims would be backed up; etc. sigh I tried reporting these problems, but it seems providing plain old open email contact addresses is just too quaint, and you're supposed to create an account in closed googlespace and canonicaland for bug trackets, groups, etc. Open source, closed development. No thanks, pitäkää tunkkinne! Now to find something non-FOSScrap…

4. Many Linux annoyances as of late are gone with the switch to Windows. Blurry fonts? Small fonts are not blurred by default in XP, and in any case it is a simple easily found switch to disable blurring altogether for nice well-rasterised fonts. The File Rejector and other Gnome crap – gone for good! Udev and other device access complications? Likewise. The Windows' default method for safely removing devices is completely unusable, though, only a fly shit sized tray icon with no keyboard access. That is easily fixed by installing SafelyRemove, which provides a nicer key binding triggered menu.

Want to install the latest version of a program from a small independent software developer? Exactly the original version? No problem! Just download it and install. No need to suffer from FOSS distributions' monopoly over easily installable binary packages, and the consequent obsolete packages with silent modifications. Windows is a stable platform that anyone can easily develop and distribute easily installable software packages for. While most programs can be uninstalled from a known location in Windows, on the downside, too many programs these days install their own annoying update managers. This is something that a common interface should be provided for, instead of everyone reinventing the wheel.

5. Well, enough with the sorry state of FOSS – it is not exactly news, after all – and back to documenting my experiences with Windows itself and proprietary software. After the installation sorted out and Windows itself working smoothly, it was a lot of work to find nice software for it. I had not used Windows seriously for 14 years, after all – i.e., never – so did not know the software. The happy thing is that Windows XP is still a valid and completely functional operating system that runs nearly all the latest Windows software. With Linux from 2001, you would pretty much be limited to software from 2001.

A music player it was easy to find: Foobar2000. It is in many respects much better than anything I have seen for Linux. I had been using moc (Music on Console) for many years now, and it was great while I still had little hard drive space, with most music burned on CDs and DVDs. But after I got a small external 500G USB HDD1 as preparation for the laptop acquisition, and loaded everything on it, I finally wanted something that let me browse things by artist, genre, etc., to find stuff more easily – stuff I had already forgot I had. I did not find any nice software for Linux that would not have been too overbearing, too playlist-oriented, or simply broken. Foobar2000 fits that bill.

For the occasional non-Flash-crap video,2 I have mostly just stuck with Windows Media Player. A bigger problem has been finding a nice image viewer. I still have not completely solved it. On Linux, gqview or its successor, geekie, is a very nice one with somewhat decent keyboard support. They can also be reasonably used with ufraw for photo processing. There's a Windows build, but I wanted to keep my system gtk-free. What would be the point of switching to Windows, if you still had to suffer from Gnome File Rejector and all that crap? Unfortunately, most image viewers around suck, for both *nix and Windows, and it took a lot of effort to find something even remotely tolerable, failing at finding a gqview-feelalike. So far, I have settled for Xnview, when Windows' own viewer is insufficient. It is not ideal, but I could not find anything better, and at least there is a way to navigate linearly through the images. Too many image viewers' directory viewing panes are two-dimensional, which makes going through the images linearly painful or overly complicated, linear navigation being distinct from directory viewer navigation, if available at all. Xnview also suffers from this.

As I'd occasionally use the image viewer in conjunction with a photo Raw converter, I also tried out some of the proper photo management softwares. All the freely available ones I have found to be too buggy or too slow and bloated (read: java) to be useful, so I have been trying out Lightroom with an evaluation license. It is probably even too featureful for my needs, and certainly too overbearing with its rigid catalogs, but if not for one major problem, the interface itself seems quite nice for WIMPshit. The major problem is the program being terrifying bloatware, and its developers needing to be given a lecture or a beating on responsive user interfaces. All the controls seem to wait for the computationally intensive change they control to be performed, before they update their positions. The developers are either incompetent idiots, sleeping with hardware manufacturers, or both. I do not mind if it takes my poor computer some time to compute the change in the image; the user interface can still be responsive on a meagre computer from the good old times when screens were taller (4:3) rather than wider (16:10) than typical photographs (3:2). Well, they are not going to see any money from me.

My browser and RSS reader of choice is still Opera; no change from Linux. I avoid Office applications like the plague; I write LaTeX with joe in Cygwin. I suppose there are some LaTeX editors for Windows perhaps worth a look, if configurable to use joe bindings, but I haven't bothered checking. For PDF reader I have found Foxit to be quite tolerable. It even support bookmarks and notes on PDFs on which it has not been specifically enabled on by Distiller. (Adobe's own disgusting bloatware offering only lets you make bookmarks and notes in PDFs on which it has been specifically enabled with Adobe's secret key, contained in Distiller.)

For the scanner the software that came with it is much better than the insane Linux ware that keeps calibrating the scanner for every scan, for every page pair of a book. Sandboxie is nice for running suspicious programs in a sandbox, and TrueCrypt for storing private data.

MagicISO I have found useful for accessing CDs and DVDs created with invalid Joliet file names by broken Linux software. Then there is of course µTorrent, Daemon Tools, etc., Standard Stuff not really worth even mentioning.

6. One thing I have learned is to steer away from ATI graphics chipsets in the future, if possible given other constraints. Their Linux drivers suck donkey balls, but so do the Windows drivers. I already had to reinstall them once, as they… ummm… could not find themselves anymore. I also documented how on Unbuntu you can only use the Unbuntu duct tape and cable tie versions of the drivers. The situation seems much the same on Windows: you can officially only use ancient IBM/Lenovo-provided versions of the drivers, as the ones you can download from ATI's site simply refuse to install. There are, however, cracks available to remove that restriction. Fortunately, this is also the only case of “the distro provides everything” mentality that I have come across in Windowsland. In this case of a driver provided by a hardware integrator, it might even have some sense to it, if you had a recent system actually supported by them. I do not think my old second-hand T43 counts as one.

Some of the other IBM/Lenovo-bundled software is also pure shit. Sonic DLA, which provides DVD UDF writing support – not found natively in XP yet – is a major source of frustration. The only way I have found to switch between DLA and accessing normal non-UDF disks, that doesn't involve a reboot or something as drastic, is to plug off and reinsert the entire drive. Only after that will the disks be read correctly. Quickly done, but highly annoying. Then again, UDF writing support in Linux was so much pain that I never got around to it at all.

In Part 2 I also complained how Unbuntu keeps forgetting various Trackpoint and touch-or-even-approach-me-and-unleash-hell-pad settings. Unfortunately, even the IBM/Lenovo drivers sometimes fail to remember over hibernate that I have disabled the latter infernal device.

7. Security is, of course, a major issue with Windows. I tried to use it without Administrator rights, but all sorts of problems surfaced. Most Windows programs have clearly not been designed to be used without Administrator rights. Many installers refuse to run (but this is the case with centralised Linux package management as well). Switching to an Administrator account for installation is possible, although not well integrated in XP – I suppose the UAC stuff of Vista helps here somewhat. But many (freeware) programs are broken, not written for a multi-user system, and will then only run on that Administrator account. Aside from installation, some programs also fail that need access to the hardware, but are only run on user login due to interactive components (e.g., tpfancontrol).

Of course, anti-virus is something of a necessity on Windows, if you want to do anything “susceptible” or use mainstream email software, etc., and it does come with a notable performance penalty. This is not really Windows' technical fault, though. It is only a fault of its popularity, and any OS of similar standing and lacking advanced sandboxing techniques (think: capability-based security), would require anti-virus. As for government backdoors, well, Linux distributions are not insusceptible to them, and the source available does not help as much as one might think, because the compiler can always be tampered with, ad infinitum. If the current totalitarian trends keep up, they will anyway soon outlaw and block by hardware all operating system level software not signed by the fascist government.

Another well-known annoyance of Windows is the rebooting. You do not actually have to reboot XP often due to crashes, as was the case with 95. SP3 is actually very stable. I have not seen any BSODs after my initial undervolting attempts, aside from a Cisco VPN driver and F-Secure Antivirus incompatibility, that was easily resolved. (And soon after the uni changed licensing to POS Symantec.) Even standby and hibernate work nearly always, unlike in Linux. It is just that 99% of all installers are idiotic and want a reboot, even if they would not really need it, if the developers just spared more than a single braincell on the installer. By default Automatic Updates even reboots automatically when you are not on the computer, which is just utterly brain-damaged and will lose your work. Even after you disable that idiotic behaviour, it keeps regularly bugging you about a reboot. sigh. Well, at least the updates and the need to install retarded software aren't that frequent. Also of note is that this reboot lunacy is creeping into Linux too: During my short encounter with Unbuntu, I experienced its update manager demanding a system reboot. On the positive side, Partition Master extended my C: partition on the fly over my old Linux partition, when I erased it a few days ago, being confident I no longer needed it.

8. Indeed, to answer the question in the title: Yes, I have defected, and uttered: Goodbye Linux! See you again when the tides have turned! If I can't choose the music, it's not my revolution.

Windows XP is not perfect, and there are some issues with it. But, in the end, Windows does what I really need an operating system to do with the least of effort. The Trackpoint even makes it almost tolerable. Windows is somewhat crippled, dysfunctional, but it is usually not completely and randomly broken – on purpose, as has been the case with FOSScrap recently. And Microsoft, despite its otherwise monopolistic position, does not wield a monopoly over the software that I can easily install on Windows, unlike do FOSS distributions.

I have abandoned Linux, but I have not abandoned unix. I wish some well-performing unix-like or better command line environment would integrate better with the rest of the OS. Mac OS X might be better in that respect, but Apple is concentrated on cashing in on the trend clowns, and opts for the glossy and shallow in hardware as well as software. It is severely crippled in exactly the wrong place, making love impossible. Plus I'd have to use a cracked warez version to run it on a semi-decent piece of hardware,3 although, admittedly, recent Apple touchpads are far better than any other I have come across, and seem relatively usable as singular pointing devices. But archetypically to these infernal pads, they are in the way of comfortable typing, and not an integral part of the keyboard like the Trackpoint is.

So Windows (XP) is my choice of OS for now. Having learned to live with the disabilities of that environment, I generally get things done, without having to upgrade the entire OS every month to install the latest version of a program I want to keep up-to-date with. Indeed, the biggest sources of frustration remain the few broken pieces of FOSScrap that I still cling to, and haven't (yet) found suitable replacements for. On the other hand, there are some nice programs that I would miss on *nix.

I do not miss the feces-throwing competition known as Linux.


1 Dead by now. POS Seagate could not take a drop from the table induced by tripping on the network cable. The Thinkpad itself survived without a dent. Accelerometer-triggered head parking is something every decent mobile hard drive should have.

2 One frightening form of brain death that I have encountered during my time with Windows is video howtos… instead of one-liner instructions.

3 Actually, now that I have an SSE2-capable processor, I was finally able to test OS X, in VMWare. It is a joke. Unbelievable bloatware. It is considerably slower than Vista was on my slightly less powerful old computer, likewise in VMWare. Pretty much unusable. Does not promise much of performance on bare hardware. That said, the system part of the UI is actually quite responsive. However agonisingly slowly the system is trying to open a Finder window or system preferences dialog, existing windows can be moved around fast.