A relative gave me an old laptop with Windows 98. Which led me to the question: can you take a castoff laptop and, with zero or very little money, improve it so that it's more useful and runs more "modern" software? The answer is: yes! In fact, this turned into a little game/project for me, and I learned a few things along the way. So I wrote down what I decided to do, in the hopes that you may find these ideas useful for reviving an old laptop yourself. I think it's a shame that older machines sometimes rot in closets instead of helping people, and I hope that this document will help change that. With a little elbow grease (and adjusted expectations), you can still get mileage out of an older laptop.
A key requirement in reviving an old laptop is not spending any serious money -- spend nothing, or only a little. It's not really worth investing much money in these old machines, unless you can reuse the components and you're likely to do so. Remember, you can always go out and buy a new one, so you need to invest only a tiny fraction of the dollars it'd cost to buy a new one. A new one will have faster and better everything, and will probably take less time to set up.
The text below tells you what to do if you want to duplicate what I did. Some steps may not make sense, depending on what you want to do and the resources you have on hand. I talk about deciding what to do with it (including selecting an OS), getting new hardware (keep it cheap!), buying a wireless card, making backups and moving partitions to a new disk, installing GNU/Linux, updating a Windows 98 System, and making a boot floppy for windows (or any other partition); I end with a few conclusions.
The most important step is to decide what to do with the laptop, and that's influenced by the capabilities of the machine itself. A laptop with an 8080 processor and 48K of memory is not going to be running the latest software, though it might be perfectly fine for typing meeting notes. So think about the kinds of applications you'd like to run, and what operating systems are necessary (or desirable) to run. In my case, I'm starting with a Toshiba Satellite 2100CDT.
A key decision, from an installation or upgrading point of view, is the operating system to install. There are three main possibilities: a version of Windows designed for that machine (Windows 98 in my case), GNU/Linux, or both (dual-boot). (Yes, there are alternatives, such as FreeBSD and OpenBSD; if you want to do that, you no doubt already know it.)
Trying to upgrade to a newer version of Windows is generally hopeless; older machines often run newer Windows versions very poorly. Microsoft doesn't support Windows 98 much any more, even though Windows 98 is still one of the most popular platforms (it was 25% of the Internet users in 2005, with a much larger total -- probably a majority -- if you consider all desktop users in 2005). So, left to its own devices, you'll start to miss out on the more recent capabilities and security capabilities of more modern machines. If you really want to use Windows, there are things you can do to at least upgrade pieces so it's a little more modern.
For GNU/Linux, there several well-supported distributions (like Fedora Core, Ubuntu, and SuSE). GNU/Linux is much more secure than Windows 98 because it supports true separation of user from system; it also benefits from the decades of research in securing Unix-like systems on the Internet. If your goals are to do web browsing, email, edit office documents (in .doc / .ppt / .xls formats), and play some games, GNU/Linux is probably the better choice in many cases. Installation experiences vary though; many people have no problems, but some laptops' nonstandard hardware can cause trouble... it all depends on the laptop.
I decided to install a dual-boot system, with both GNU/Linux and Windows. I normally use GNU/Linux; I find it much more pleasant to use than Windows. But I have a few applications that are Windows-based, and I also sometimes do comparative analyses where having a Windows system around is handy.
So below I'll describe how to update a Windows 98 system, how to move Windows to a new hard drive, and how to install a GNU/Linux system with some trimmings.
We should spend little money.. but spending a little can help a lot. I bought a little memory, swapped in a bigger hard drive (no cost to me), and bought an inexpensive wireless card. (In my case, the original laptop also had a power connector problem that a screwdriver, soldering iron, and some time solved; hopefully you won't have that kind of problem!)
To improve performance, consider buying some memory. It's cheap, and it significantly improves performance in general, as well as your ability to run large programs simultaneously. If you have 192M or more, I've found that 100% modern GNU/Linux distributions work very nicely. I bumped my memory up to 192M for $40. If you do change memory, get and run memtest86, a free memory-testing program (it comes with the Fedora Core disks, if you're using Fedora Core).
I happened to have a hard drive around with more space. So I copied the original disk partition off (I'll explain more below), swapped drives, and copied the partition back to the new drive... instant bigger disk.
The wireless card involved so much research that I'll talk separately just about that (next).
If you want to buy a wireless card, make sure it can run well and easily on GNU/Linux (even if you don't plan to use it that way now, it's more flexible if you can). It's easy to buy a card that won't work easily and create lots of headaches for yourself... don't do it. Instead, look up a few sites and make sure the card is likely to work easily. In particular, you want to know if there are open source software drivers for that card, and if those drivers support extensive functionality.
One way to see if a card has an open source software driver is to look at the Free Software Foundations (FSF)'s wireless cards list. In general, what you do is find the underlying chipsets that work well with Linux, and then you find out what products use those chipsets. As of November 2005, the Ralink 2500/RT2400 and Realtek RTL8180 chipsets were well-supported, and they list the products that use those chips. They also noted that there is an open source software driver for Atheros, though with a limitation (it doesn't include all code). The FSF is a harsh grader, but that's okay, their detailed investigations help me quickly narrow the field.
But is it functional? The most stressing applications for wireless cards are the ones that do security scanning/auditing, like Kismet and Aircrack. (They also essentially require the use of GNU/Linux; I don't know anyone who seriously does wireless security analysis using Windows.) Kismet notes that the Ralink, Realtek, and Atheros chipsets are supported, and the Aircrack documents even recommends the Atheros and Ralink chipsets. (Note: The best way to check a system's defenses is to stress-test it, just like crash testing is an excellent way to learn about a car's defenses... but do not use such tools to attack others' networks. If you use tools like Kismet, please use them responsibly.)
Good alternatives sources to look at, to see if there are any "gotchas" in your choice of wireless products before buying them, are Jean Tourrilhes' extensive research and TuxMobil. I've learned that many have been happy with other cards, such Prism based cards (hostap), old/classic Orinoco cards (orinoco), and Aironet 350 (airo). A little extra time spent in research may save you lots of time later.
WARNING! Some cards on Linux are supported by "ndiswrapper"; this is a software shim that lets users run Windows binary drivers or wireless cards on Linux. DO NOT DEPEND on ndiswrapper -- and NEVER buy a wireless card (even if you're buying for Windows) if its Linux implementation requires ndiswrapper. There are lots of reasons:
I decided that the Ralink looked like the best chipset -- recommended by all, and in particular strong OSS support (so I'm likely to keep getting support into the future). Some initial reports suggest it's easy to do -- here's one report saying that their Ralink 2500 card was plug-in-and-go on Fedora Core 4. And the FSF told me what products used the Ralink chipset. So I went and bought me an ASUS WL-107G for $30, which does 802.11b/g... enough for my needs.
Will it work? When I first wrote this, I didn't know. Update: The wireless card works fine. You have to install the driver separately -- I used the serialmonkey 1.1 driver -- and it takes a few steps to install the driver (don't do "make install" on Fedora, they have a special install command for Fedora that is tailored for it). But by following the directions, it worked fine. They include a fancy Qt-based config tool that you can compile, but I didn't bother. It'd be much nicer if the driver were automatically included in the compilation; I hope that very soon this will be integrated directly into Fedora, because that would make it MUCH easier. But it didn't take long.
I have no CD-ROMs for the Windows operating system as installed by this laptop (in particular, I don't have a CD-ROM with the required manufacturer-specific drivers). No hard drive lives forever, and once this one goes, the machine is dead unless I back up the disk's contents. And of course, if I get a virus or whatever, the only safe thing to do is recover from a known safe source. In my mind, it's a crime to not be able to reload a machine from scratch if the hard drive goes bad (or if you get malicious code, which has the same effect) -- a "backup" on the same hard drive isn't a backup at all.
I had a hard drive with more space, and I could give Windows a larger partition while still giving lots of space to GNU/Linux. So first step: back up the current Windows partition, so I can swap in a bigger hard drive and dual-boot, as well as recover from disaster.
Since it's unwise to backup a partition that's in use, the obvious solution is to slip in a CD-based Linux distribution that can boot and give me a useful network connection (so I can back up the partition to another computer on my home network). Unfortunately, the Red Hat Fedora Core 4 rescue disk couldn't find the PCMCIA ethernet card I have, and Ubuntu's "Live CD" (from TheOpenCD 3.0) had trouble with the laptop too when booting off the CD. That's not really surprising; I suspect their "full" installations would work well on the machine, but neither are really designed to be full-featured from a CD. So I turned to one of the many CDs specialized for this. I could have easily used Knoppix, and it would probably have done very well. I instead happened to use the "Auditor Security Collection"; since it focuses on doing lots of network-based analysis, and it's quite normal to use it on a laptop (so you can walk in to a client's network for analysis), they work VERY hard to make sure that laptop networking works out-of-the-box when booting from their CD.
There are lots of ways to copy partitions. But I have a trivial need, just to copy a big "file" (partition). Instead of trying to install some sophisticated program, I just used good old netcat (nc), and copied the specific partition I needed over the network. Netcat just copies data across a network, and that's all we really need. (I did this behind a firewall, of course.) Netcat doesn't know about partitions (so it'll send useless data), and it doesn't compress (so it'll take longer), but it'll do the job.
To use netcat I needed to temporarily open a port on my Fedora Core 4 system (as a security measure, all ports are closed unless explicitly opened). I just picked some port (I'll arbitrarily choose 1234) for this work, and opened it. On Fedora Core 4, just go to Desktop/System Settings/Security Level, and at "Other ports:" enter "1234:tcp". Now we can send the partition across the network. First, on the system where the partition is going to be stored, do:
nc -l 1234 > first-partitionAnd then on the laptop, where the partition currently exists (the "cat" is just to make sure nc has no idea that it's reading from a special file, and probably isn't needed):
cat /dev/hda1 | nc 192.168.2.132 1234I then did a quick "md5sum" of the partition on the original system (md5sum /dev/hda1) and of the copy (md5sum first-partition) to make sure they matched -- and they showed a match. (Yes, MD5 is broken for cryptographic purposes, but it's rather unlikely an attacker would be able to perform that kind of attack in this case.) Be sure to close the port back up when you're done.
Now I swapped in a much bigger hard drive I snagged from a laptop (the other laptop works, but it doesn't support CardBus cards).
I set a new partition, much larger than the old one. I then used netcat to copy the files back.
cat first-partition | nc laptop-ip-address 1234on laptop:
nc -l 1234 | cat > /dev/hda1and we're golden. I later used "parted" on a Linux system to resize the Windows filesystem; that way, Windows could use all that new space.
If you ever decide to do a dual-boot install, remember the golden rule: install Windows first. That's because Windows is fundamentally rude; it assumes that there are no other competing products, and it simply overwrites whatever boot process you had before. Humph.
In my case, though, I'd already "installed" Windows by copying its files into a new partition. Problem is, my disk didn't have a "master boot record" installed to actually start a boot (because we haven't run anyone's installer), so by installing GNU/Linux next, I could get that fixed and set up to dual-boot.
I chose Fedora Core 4, though Ubuntu was definitely tempting. However, Fedora Core 4 includes automatic buffer overflow protection, which Ubuntu currently lacks. Since around 50% of all security vulnerabilities (including the ones we don't know about yet!) are buffer overflows, this makes Fedora Core a safer OS than most other operating systems -- Fedora Core will have 50% fewer vulnerabilities than most of its competitors, because of this simple mechanism. On Windows, programs have to be recompiled to gain this protection... it's built-in from the beginning in Fedora. I understand Ubuntu is looking at adding this, and once they do I'll definitely take a look. Fedora Core 4 also has SELinux, and uses it to give additional security separation, another reason to like Fedora Core 4.
Since I wanted much more control over my install, I used a custom install and used Disk Druid. Partition 1 is for Windows (FAT32 LBA), partition 2 was swap, partition 3 is /boot (so that in a crisis I can still boot), and partition 4 is the rest ("/"). I used to use separate partitions for "/home", variable directories like "/", and mostly-fixed directories like "/", but ext3's recovery capabilities are so good that I haven't needed to... and since this disk is a little small, this way I won't have to worry if I need more space than I expect in any of them. I don't plan to install multiple Linux distributions on this thing (another reason to have a separate /home directory), so no need. I made sure I selected ext3 for /boot and /.
For Ethernet connectivity, I have a 3Com card (an 3c575-tx 10/100 Ethernet card), and it didn't work out of the box. So, I had to look at the error messages from Linux, which is stored in /var/log/messages. It had lots of error messages involving IRQs and suggested adding "pci=biosirq". No dice. While starting up, Linux noted that it was "Disabling IRQ#11"; a Google search on this phrase found this note that recommended modifying the kernel line to add acpi=force; this was an issue clearly noted in the startup anyway. Adding "acpi=force" to the linux kernel line completely solved the problem. (You edit /boot/grub/grub.conf as root to make this permanent; just modify the line with "kernel" at the front.)
Fedora Core 4 generally did a really good job of auto-detecting things. The graphics display, sound card/speakers, CD-ROM drive, hard drive, floppy, built-in mouse, PS/2 mouse, and USB bus (including USB memory stick) were all automatically detected and configured. Once the "acpi=force" line was added (allowing it to use ACPI), the ethernet networking worked completely automatically. The display configuration doesn't allow for other virtual terminals while in graphics mode, and the shutdown display gets odd, but this no negative impact on normal use. I haven't tried the built-in modem or external display. (Someone else has reported that the modem can be made to work, but because it's a Winmodem instead of a real modem it requires downloading a separate driver -- I haven't bothered.)
To easily access the Windows 98 partition (as /media/windows), I created a /media/windows directory and then added it to /etc/fstab. I decided to add it so that logging in would mount the Windows partition, so I added it this way:
/dev/hda1 /media/windows auto pamconsole,exec,noauto 0 0Don't include "managed" as an option, or it won't be around the next time you boot.
A simple "yum update" as root updated all my software (I ran it overnight), in particular the excellent OpenOffice.org office suite version 2. I then looked over the Unofficial Fedora FAQ for good ideas, such as turning off the new spatial file manager. I then got the RPM for Microsoft's True Type core fonts (non-RPM systems should look at the SourceForge project that makes Microsoft's True Type core fonts available on Linux). I also went to Desktop / System Settings / Server Settings and disabled stuff I don't need.
Fedora Core 4 has a known bug if sync'ing with Palm Pilots over USB, which causes sync'ing to fail. Here's the bug report which also discusses solving it. (I tried the proposed solution; it didn't work for me, but by the time you read this it's probably fixed.)
I never use up2date; yum is better. It just wastes time on boot, and pixels too. So let's remove it:
rpm -e up2date up2date-gnome firstboot rhn-applet
I'm told that in low-RAM situations you might want to modify your X (graphical) configuration to use XFCE or Fluxbox instead. This removes some functionality in exchange for performance. I haven't needed to do that.
This computer has a very limited LCD screen; its resolution is only 800x600. To get more pixels, I right-clicked on each of the top and bottom panels, selected properties, and turned on auto-hide. I also reduced the size of fonts in various displays.
I found out what the graphics card was from the logs, and then looked up (in the man pages) its options to see if I could speed it up. There were two that seemed promising, so I edited /etc/X11/xorg.conf and added these in the "Device" section. To be honest they don't really seem to speed it up by much, but every little bit might help:
Option "pci_burst" "true" Option "pci_retry" "true"
Time to boot into Windows 98 and see what we can do. Remember, normally you install Windows first and then another operating system. But after you install Windows 98 (no matter how), it needs some TLC if you want it to be pleasurable today. Here are some things you can do to make a Windows 98 feel a little less old. A lot of it involves installing updates, setting configurations to be more reasonable, and installing the best open source software available for Windows 98 (which often cost nothing and are maintained).
It's wise to have some protective mechanisms on Windows. (That's especially true in my case -- without the manufacturer CDs I can't reinstall the operating system from scratch.) So I installed and ran Spybot Search & Destroy; this will at least help remove malicious spyware, if there is anything. (It's free and very good. No, it's not open source software, but if you wanted to only run open source software then why are you running Windows?)
Now let's get prepared:
Now install more up-to-date software. If you get TheOpenCD, you can get many of these programs at once, and if you don't have a high-speed Internet connection that may be the best way to get them. (Careful, though, TheOpenCD may not have the latest and greatest of software you depend on.) All of these programs are no-cost, and most are open source software. Anyway, here's some software to snag:
Windows 98 cannot, by itself, handle USB memory sticks. Thankfully, many USB sticks come with a Windows98 driver, and that seems to be the easy way to get a driver.
If you also do lots of Unix stuff, you can't live without PuTTY, vim, and Cygwin. Running Cygwin is not nearly as pleasant as running a real Unix-like system, but it's a start. When installing Cygwin, the recommended root directory (C:\cygwin) is fine, but be careful about the packaging directory -- do not let it go into the "Desktop" (its default)! Instead, place it somewhere else -- C:\cyginstall is a good choice. Remember to add rxvt to the installation (it's under "shells"); rxvt is much more pleasant to use for many tasks. If you want X-windows, then you'll need to install the X11 base; see the documentation for more information.
If you use Cygwin and add rxvt, add it to the desktop so it's easier to start. Create this file c:\cygwin\rxvt.bat:
@echo off C: chdir C:\cygwin\bin rxvt -e bash --login -i(instead of "-e bash --login -i" I use "-e pdksh -l"). Right-click, say you want to create a shortcut, and drag that shortcut onto the desktop.
Now we can go tweak Windows 98. Here are good sites for helping you fix up Windows 98:
Here are few ideas:
You might want to take a peek at my article on securing Windows.
Defragment the disk when you're done, going to Start -> Programs -> Accessories -> System Tools -> Disk Defragmentor. Windows 98 is very poor at this.
There are lots of sources for useful Windows programs. TheOpenCD is very selective, so its stuff is known-good and easy to install. OSSwin project lists open source software for Windows. I'm sure there are more sources of information.
I do have a remaining problem, specific to many Toshiba laptops (including my Toshiba 2100CDT). The problem is that the Toshiba's hardware lies; its video card says it supports up to 1600x1200, and it does -- but only to an external monitor. The built-in display only supports 800x600, though, which is pretty limiting, and it can't seem to explain that well to software. When games ask what's the "max screen resolution", they get a larger number, and then try to use it. The Toshiba then does "hardware panning" (aka virtual desktop), which is fundamentally stupid. In other words, you can never see the whole screen at one time, because the software thinks you're seeing everything, and the hardware never lets the software know otherwise. I've never found a situation where I wanted hardware-based panning; it's extremely hard to do anything useful when you can't see the whole screen! That means many games won't work, because I can't see the whole screen. This seems to be a fundamental failing with the machine that was true when it was sold, so it's not like this is a new problem. Disabling "panning.sys" in config.sys (run "msconfig" for an easy way to do this) doesn't seem to help.
This is only a problem in Windows, and not in Linux. In Linux you can prevent panning directly. I could write an assembly program to disable this, but I doubt I'll bother. This is really a nasty problem -- what's the point of having a "feature" that makes software unusable? This makes using fun free games like Battle for Wesnoth inaccessible on Windows while there's no separate attached screen. (Battle for Wesnoth works just fine on Linux).
Most of the time, I boot into Linux, it's more pleasant to use. But I've set things up so that I can boot into Windows if I wish. However, I found it was convenient to have a "key floppy" that simply forced the system to boot the first partition (Windows)... otherwise, it would by default boot Linux.
So how do you create a boot device (say, a floppy, stick, or something else) that boots something particular? The general idea is discussed in "Boot with GRUB" by Wayne Marshall, which tells how to create a floppy disk that boots grub, including a configuration file. This is much better than using Windows' SYS command for booting Windows; it's more flexible, and the system won't think a file is still open after it's started.
Here are the commands (on Linux) to create such a thing:
fdformat /dev/fd0 /sbin/mkfs -t vfat /dev/fd0 mount -t vfat /dev/fd0 /media/floppy mkdir -p /media/floppy/boot/grub cd /boot/grub cp stage* grub.conf /media/floppy/boot/grub cd /media/floppy/boot/grubNow you edit grub.conf on /media/floppy/boot/grub, at least change default= so Windows is the default. Here's a good sample grub.conf file:
default=0 timeout=5 hiddenmenu title Windows rootnoverify (hd0,0) chainloader +1Then let's finish setting up the floppy:
cp grub.conf menu.lst cd umount /media/floppy /sbin/grub root (fd0) setup (fd0) quit
Well, after all that, I have a laptop... with Ethernet and wireless, dual-booting Windows and Fedora Core. It's certainly not a high-end machine, but I only spent $70, so the price is pretty nice. I'm not the only one; others have found the pleasure of reviving an old laptop. It takes a little while for the laptop to boot, or to load big programs (like OpenOffice.org), but once it gets started it runs very well. Fun!
Feel free to see my home page at http://www.dwheeler.com. You may also want to look at my paper More than a Gigabuck: Estimating GNU/Linux’s Size, my article Why OSS/FS? Look at the Numbers!, and my papers and book on how to develop secure programs.
(C) Copyright 2005 David A. Wheeler. All rights reserved.