I spend my time advocating free software, but hypocritically I find myself using Windows more than GNU/Linux. Why do I advocate what I don’t do? Like so many things, on an idealistic level, I know what I should do, but when ideals bump up against convenience, ideals tend to take a backseat. It is a sad reality that even I, as a person who most people would call an unrealistic idealist, have to bow to annoyances like efficiency and functionality.
The sad reality is that my hardware plays nicely with Windows, while it doesn’t with GNU/Linux. On an intellectual level, I know that GNU/Linux isn’t necessarily to blame, but that doesn’t lessen the fact that certain things just don’t work in Linux on my lovely Compaq Presario v2410US laptop in GNU/Linux. My laptop has this part from TI with a Firewire (IEEE 1394) port, USB port, and a media card reader. The USB and firewire ports work fine, but the media card reader might as well be an empty hole in my computer as far as Linux is concerned.
Why the inability to access photos from my camera is a niggling annoyance, more important is the fact that Linux can’t go into hibernation mode. It can shut down the screen, but rest of the hardware is still running, sucking precious battery power. In Windows, if the battery power runs out, everything is saved to the harddrive and the hardware turns off, but in Linux, the OS simply dies and all my work is lost if I haven’t remembered to save it. Since I frequently have to close my laptop and stick it in my backpack in the course of a normal day, this has become a major annoyance. Since I don’t have a designated area to work, I often have to pick up and move to a new spot, depending on what space becomes available and where I have to be. This means that I have to go into the full bootup and shutdown process 5 or 6 times in the course of a normal day. In Windows, this is a simple process of opening the laptop, selecting Windows as my OS and waiting 30 seconds for the computer to come out of hibernation mode as the temporary memory is reloaded from the harddrive. It is quick and convenient, especially for someone like me who employs the laptop as a prop to demonstrate our project to translate free software into Quechua. Since I’ve become a roving evangelist, promoter, and recruiter for the project, it is important that I have all my props ready at hand at a second’s notice. Taking 4 minutes to go through the full GNU/Linux bootup process is a real turnoff, especially with people who often only have a couple minutes to pause and talk to the idealistic crusader who want to create software in indigenous languages.
When Linux finally does bootup, I’m forced to plug in an external mouse as well. My Synaptics touchpad works in Linux, but it hasn’t been tweeked to ignore random palm brushes when I’m typing, so the mouse randomly jumps around the screen when I’m trying to type. Since I tend to have a heavy palm, this is a major annoyance. I installed a special driver for the touchpad, so it would automatically ignore input while I’m typing, but this also presents an inconvenience, since the touchpad doesn’t work for a couple of seconds after every keystroke. I kept fiddling with the desactivation time, until I finally concluded that it was easier to simply not use the touchpad in GNU/Linux. In addition, some of the advanced touchpad functions like horizontal scrolling don’t work properly in some free software programs like FireFox, but they work fine with standard MS software.
While I’m waiting an inordinate amount of time to bootup in Linux and plugging in my external mouse, I have to remember to avoid touching the wireless toggle button on my laptop. I can turn off the wireless networking to save power, but then I’m unable to turn it back on. All the standard commands like wconfig, iwup, iwdown, and network-admin simply refuse to effect it. If I accidentally press the button, the only solution is to boot into Windows and turn it back on. Not only do I not have the ability to save energy with the wireless toggle button like in Windows, but it also forces me to waste 10 gigs of my harddrive on a nasty Windows partition.
While remembering to not press that little wireless toggle button is only a minor inconvenience, the inability of Linux to properly monitor the heat of my CPU is a serious problem and potentially dangerous. Occasionally, GNU/Linux will abruptly shut down my machine with the scary message that my CPU has reached 144º C and is at risk of overheating. It doesn’t happen very often, and usually I simply wait a few minutes for the CPU to cool down and then reboot. The thing that is strange about this odd shutdown, is that never happens when the computer is doing the kind of processing which would normally cause it to heat up. When I put my hand on the laptop case, it doesn’t feel hot. I’m not sure if the processor has really reached this critical temperature, or it is just misreading the actual temperature. It is impossible to judge from the temperature of the case, since the fans haven’t turned on to transfer the heat away from the CPU. It seems that GNU/Linux isn’t able to ramp up the fan speed in accordance with the processing level, but not according to the actual CPU temperature–or at least that is my best diagnosis of the problem.
On an intellectual level, I know that GNU/Linux isn’t to blame for these problems. If anyone is to blame, it is the hardware manufacturers who refuse to make drivers for their hardware for Linux, yet truculently refuse to release the specs to their hardware so Linux hackers can do the job themselves. My TI media card reader doesn’t work in Linux, because TI won’t tell anyone how to control the part. They create proprietary drivers compiled in a binary format that can’t be read by normal human eyes and only run in Windows. That Broadcom Wireless card which I can’t turn on in Linux is also controlled by a proprietary driver and Broadcom petulantly refuses to release the vital information so that a decent free software driver can be created in its place. The kludgy hack created to load and control their proprietary Windows drivers inside Linux doesn’t work very well, especially when implementing special toggle buttons. I imagine that my CPU occasionally overheats, because Compaq won’t release the documentation on how to properly monitor the CPU temperature in their laptop motherboards.
Tech companies like TI, Broadcom, and HP-Compaq generally claim that releasing this information will give their competition too much information about their products and they will loose their competitive advantage, but this is a fallacious argument, since the competition can discover just about all the information they need to know about their competitor’s products without this information. They aren’t being asked to release their software drivers or the code in their hardware, just the API or the specs to control the part. Even without seeing the API, the competition can just as easily see what features are being offered and duplicate them. Other hardware manufacturers gain very little from being able to read the actual specs. It might save them a few days, because they don’t have to spend as much time deciding on the format of their own API, but they still have to implement the API and that is the tough part.
When I had to design an API for a video converter board for Convergent Design, it wouldn’t have helped me one iota to be able to read the API specs for the competing Sony board. We knew basically what the Sony board did and knew that we had to offer the same basic features. It wouldn’t have taken me any less time to duplicate the Sony API or implement our own unique API, aside from the time I spent decided what to implement and what to leave out. Since our design was so radically different from Sony’s, I couldn’t have used the Sony API anyway. Even if we had decided to use the same chips as the Sony board, I still doubt it would have helped me much, and it might have even been a hindrance, because in designing my own API, I probably saved time because I figured out what made logical sense to me and how to most efficiently implement it. In contrast, copying a competitor’s API would have meant that I would have to implement something that didn’t necessarily make much sense to me and probably would have been programed in a less efficient way.
At any rate, using the same API isn’t much of a competitive advantage when producing hardware. It doesn’t make your product any cheaper or help you get it to market much faster. The South East Asian manufacturers are extremely competitive and they are in the best position to know what constitutes a real competitive advantage. Nonetheless, they generally release the detailed specs to BSD and GNU/Linux hackers when asked. They realize that they are loosing a potential market sector, which is far more important than letting your competition see the API. In contrast, US hardware manufacturers generally refuse to let free software programmers see the specs. Judging from where the hardware manufacturing sector is migrating, it would be hard to argue that the US manufacturers are better competitors than the Southeast Asians. The difference is cultural. In the US, we promote the pernicious concept of “intellectual property”, whereas in much of Asia, the concept of owning and controlling ideas is a foreign import that is often regarded skeptically. American companies automatically assume that they ought to tightly control their “intellectual property”, even when it doesn’t constitute a commercial and competitive advantage. Unlike the competitive Asians, the American companies are blind to the fact that they are loosing 40% of the server market and 3% of the desktop market that uses free software. Partly, the difference may also lie in the fact that governments of China and South Korea are actively promoting the use of GNU/Linux, whereas the US government promotes the interests of proprietary software companies like Microsoft, especially in its free trade treaties and its government purchasing contracts. Nonetheless, the biggest difference is that many Americans companies are imbued with notions of “intellectual property” which blinds them to the needs of their own customers.
Unfortunately, the wrongheaded decisions of manufacturers makes GNU/Linux appear to the user as an inferior operating system. In my case, instead of complaining to Synaptics, TI, Broadcom, and HP-Compaq for not releasing the technical specs for their touchpad, media card reader, wireless card, and CPU temperature monitor, respectively, I end up complaining in the support forums of Ubuntu.
Despite the fact that the majority of these problems are not caused by GNU/Linux per se, nonetheless, there are a number things that could be done to make GNU/Linux more usable. Unlike Windows, GNU/Linux isn’t designed to be rebooted. The designers assume that you will turn the machine on and you leave it running, sometimes for months on end. What is a virtue for servers, however, becomes a major hindrance for laptops which frequently have to be turned on and off. Because GNU/Linux isn’t optimized for quick bootup, it takes a annoying amount of time to just get to the point where you can start doing productive work.
Linux makes it worse by forcing you to enter a username and password on every bootup. This is an understandable precaution for a server, but for a personal laptop which is almost never connected to the internet, it is just a waste of time. I don’t want to protect my computer against the people physically using the computer, since I am the only one using the computer 99% of the time, and when I do give it to someone else, I want them to automatically have access to everything except root access. What I worry about is all the nasty programs running around on the internet, but they are going to have the same amount of access to my user account’s information whether I have to enter a password at bootup or not. The important thing thing is that malware or a cracker can’t get access to my root account without entering a password. Ideally the computer would be set up so you have to enter a password to switch users or go to root, but for your default user it would automatically enter the password at bootup. Entering my username and password adds another 30 seconds to every bootup–a real annoyance when I have to do it 5 or 6 times in a normal day. Sadly, most GNU/Linux distributions haven’t bothered to implement this easy option.
A similar annoyance is entering my password every time I close and reopen my laptop lid in GNOME. In the course of a normal work day, I probably have to close my laptop 10 times a day to move to another work area or to put it in my backpack. I spent a number of hours trying to figure out how to turn this off in GNOME, but the only solution I found was to turn off screen locking altogether. Since I occasionally do want the ability to lock my screen, I am forced to waste 20 seconds, 10 times in an average day entering my password every time I reopen the lid to my laptop.
Most GNU/Linux distributions assume that you won’t turn off you computer very often, so they add all sorts of time-consuming checks to the bootup. For a server, these may be useful, but for a laptop user who turns on and off his computer 5 or 6 times in the course of a normal day, it becomes a major annoyance. For instance, Ubuntu automatically tries to connect to the internet to re-sync the clock on every bootup to the correct time. Since I normally am not connected to the internet, I have to wait 30 seconds on every bootup why Ubuntu goes through repeated failed attempts to connect to the internet. How often do people’s clocks get out of sync? Maybe you have to adjust it once or twice a year, but certainly not every bootup. Why did Ubuntu implement this unnecessary feature as part of bootup in the first place? Possibly for a server, it is essentially that it bootup with the exact time every time, but Ubuntu is a distribution primarily for the average Joe who couldn’t care less if his computer clock is 3 seconds off. I suspect that this feature was implemented because so many people misconfigure their GNU/Linux installation to use UNIX universal time, which throws their clock out of wack every time they boot into MS-Windows which uses a different time format, but this problem can be solved by not setting the clock to use UNIX universal time in the first place, rather than resetting the clock on every bootup.
Similarly, Ubuntu repeatedly tries in vain to connect to non-existent wireless and ethernet networks every time I bootup. Whenever I move to a spot that doesn’t have a network available, which is 90% of the time for me, I’m forced to endure an unnecessarily long bootup with repeated error messages which can be very frightening for the computer novice who doesn’t know better. Instead of gracefully attempting to connect 2 or 3 times and then continuing with the bootup with a simple message informing me that no network is unavailable, I forced to wait at least 30 seconds every bootup while Ubuntu repeatedly attempts to connect, then it switches out of the normal graphical mode into text line mode and issues scary-looking error messages. In contrast, Windows gracefully and painlessly handles the fact that no network is available.
A similarly unnecessary feature in the Ubuntu bootup is the automatic check of the integrity of the filesystem on every 30th bootup. Since I frequently reboot, just about once a week, I am forced to sit and wait while Ubuntu grinds for about 5 minutes, diligently verifying that the filesystem is in order. While this can be very useful if you have a problem, it is an utter waste of time in most cases. This program should only be implemented in a special bootup mode or if you didn’t exit GNU/Linux properly the last time you shutdown, but not as part of the ordinary bootup, and it certainly shouldn’t give you all sorts of messages if you decide to cancel the program.
GNU/Linux could be designed to deal with the fact that many motherboard manufacturers refuse to release their technical information, so it is difficult to properly implement a hibernation mode that depends on monitoring the state of the motherboard. Every GNU/Linux distribution could implement a hibernation mode that doesn’t depend on the vicissitudes of the motherboard, such as the program designed by ___. Unfortunately, not a single distribution has incorporated ___’s hibernation program as part of the default installation. Every user of GNU/Linux should be able to press a key combination that would save the temporary memory to the harddrive and shutdown the computer. Upon turning on the power again, the temporary memory would be reloaded from the harddrive and the user could quickly return to work. Not only would this feature make GNU/Linux more convenient for laptop users like me, it would also save a great deal of energy since people would frequently turn off their computers when they aren’t in use. It is common practice to leave the computer running even when it isn’t in use, since it is such a hassle to reboot it, but people would be more likely to turn their computers off and on again if the process only took 20 or 30 seconds to reload the temporary memory from the harddrive instead of 4 or 5 minutes for a full reboot.
Many GNU/Linux publications spend an inordinate amount of time speculating on when GNU/Linux on the desktop will finally arrive. The more important question we should be asking is why have so many people tried Linux, but have decided it simply is too inconvenient and too much of a hassle for normal use. Why do so many network administrators set up their servers in GNU/Linux, but continue running their personal machines in GNU/Linux? Maybe some miss the proprietary games or certain programs that only run in Windows, but I suspect that many like me simply find that GNU/Linux presents too many inconveniences for normal use. We should be worried about eliminating those inconveniences for normal users and designing distributions to serve their needs. Only then can we realistically start speculating about when GNU/Linux will explode on the desktop.