Nice to read all of those comments. The project goal is more to learn how to make your own Linux distribution than to fit as much as possible on a floppy. It is fun to have a fully working OS at the end of this learning experience. Floppies are easy to use and just cool :)
There are a lot of better suited distributions for size and memory usage. What makes FLOPPINUX stand out is the complete tutorial to follow and then make your own changes on top of it. Learn and have fun!
I'm going to guess from the size of the kernel, since for distribution it has to be a fairly 'generic' kernel with just about every driver built into it. If one were to compile a custom 6.14 kernel for a specific hardware target with only 1 model of NIC (3c509b for example), etc, it could be a lot smaller.
If it's compiled into the kernel it'll occupy memory regardless if it's being used. If it's built as a kernel module then it doesn't occupy memory until loaded.
I think you could run 2.0 + X11 in 4MB in a pinch. I know I ran 2.2 + X11 in 5MB on a cast-off i386SX; tight but useable. If I recall right, 2.0 & 2.2 would run in 2MB without X11 (but a GUI like MGR might fit). 8MB was pretty good and 16MB was positively spacious.
Edit: Add: 2MB/4MB boot with a stripped down kernel, not generic.
I got 2.2 with BusyBox to consume ~2200K at boot after a lot of fiddling. Left me plenty of user space for doing command line work on my 4MB 386; i mentioned in another comment though, X was only really useful as a remote terminal in 4MB, to run a local program via X pretty much required 8MB. But pretty sure i got Doom running in X on 8MB...
I did all these experiments a year or two ago. I lost most of my work due to a hard drive failure (the one in my workstation, not the 386 lol) but all the surviving work is on my github:
Yikes-- bringing back memories of frustration. X11 on my 486SX w/ 4MB was excruciating. It would swap like crazy. Adding 8MB more RAM made such a difference. Kernel compiles were much less swappy, too. (I can still the buy I bought the four 2MB 30-pin SIMMs secondhand from but I can't remember how much I gave for them in 1993 or 1994. I feel like it was more than $100, though...)
Indeed. So far as I recall I had a greyscale monitor that couldn't do more than 800x600. I think it was a 486sx and I probably still had a 32GB MFM hard disk at that point so it was a very underwhelming machine.
I think 1MB of RAM in a simm was about £100 at that point, but it's been a while!
The Compaq laptop I was using had a 486SX and 4 MB of RAM. It had a 640x480 (if I remember correctly) screen and I'm pretty sure the framebuffer was in a separate video RAM that was not counted in that 4 MB. Used to type a lot of LaTeX on that laptop and used X11 for previews - xfree86 even had a special driver for the specific video hardware that laptop had. Not sure if I used a window manager. I think I just pointed ghostscript at the X11 screen from a text-mode console.
I had 2.2.x running on my 386 last year in 4MB. Not enough for a full GUI though but enough to set up TCP/IP and Samba to image a drive over the network.
8MB, at least in an emulator, can run a basic Xterm but not a lot else (though it'll happily run as a remote X frontend for a more powerful machine over Ethernet, it was fun to see it try to render Gimp 3 running on my desktop lol)
My 16MB 486 had no issues with a full IceWM session (this was kind of my hacked version of BasicLinux which itself was built on a ~2000 version of Slackware)
This floppy decompresses the entire initrd image into memory at boot, which "wastes" memory compared a proper install on a HDD. You can also lower memory requirements further by enabling swap.
A floppy distro (especially one relying on a compressed initrd) will inherently require more memory. And I suspect the maker of this distro is using a different definition of "minimum" than we would have used back in the 90s (closer to "recommended").
However, it looks like modern linux kernels just require more memory; The kernel binary is certainly larger, floppinux is spending an entire 888KB on it's very stripped down modern linux (doesn't even have networking enabled), while older floppy distros using 2.2/2.4 kernels keep it under 512KB (with networking, and a bunch of other features.
Also the goal was to run LATEST kernel with no changes - just config. With other compression algorithms it was impossible to fit everything into a floppy. And I really wanted to have nano and some space to save few files. Without this it would be totally not usable OS.
I remember around 2002 running my home router without any hdd on fli4l - a single floppy linux router distribution. I slept in the same room as the router was, hence I wanted a solution without a noisy hdd from that era.
At the same time, I was running a home router without any HDD on LRP, Linux Router Project, which was a distribution from Swansea Linux, and was a floppy image, that decompressed into RAM, and then chrood to the RAM image. Really nifty, except for the 486 machine had a Pentium Overdrive, which was vulnerable to F00F, and we got owned... only to reboot again, and back to our normal image.
Since it had no hard disk, and no monitor, it was quiet, and used little power.
There was also tomsrtbt[1], which was a staple in my "rescue" floppy collection. Along with the QNX floppy[2], which came in super handy when using a cyber café or a friend's PC, and you wanted to avoid all the keyloggers and malware.
Trinux was another such utility. It spanned multiple floppies, but booted to RAM and could effectively run from one. The additional disks were for additional tools/utilities.
Still apparently available on Sourceforge.net, though last updated in 2013:
I remember some people booting firewalls off CD-R's. Burn a new one when it needed an update. Booting with no writable media at all, truly an immutable distro.
I guess I made a floppy-based "distribution" of Linux back in the late 90s without even realizing it.
I built it to do network-based disk imaging of fleets of Windows 9X PCs in a K12 school district. I used udpcast[0] to receive the image of a FAT32 volume (as a raw dd of the source drive gzip'd) and would stream it in realtime (decompressing and writing) to the hard disk drive on the clients.
I would run the udpcast sender on a "gold master" PC and stream its drive out to as many clients as I wanted (over 10Base-T Ethernet at the time, but later over faster networks). Since the sending PC's CPU was typically the bottleneck the receiving PCs never had problems falling behind receiving and writing the stream.
The most time consuming part of this "generation" of the tool was writing all zeros to the free space on the "gold master" computer to minimize transferring "slack" space (since I was just using dd and not a filesystem-aware tool). I'd mount up the drive in a Linux distro and dd from /dev/zero to a dummy file on the volume until it was full, then delete the dummy file. (One of Jeff's axioms of computing in play: Never underestimate the power of stupid technology.)
I updated the "distribution" in the early 2000's to support NTFS using the various ntfsprogs tools (ntfsclone, ntfsresize) to support imaging Windows XP machines. It was vastly more efficient than the dd method because it only transferred the used blocks of the filesystem.
Since you could make bootable CDs (and later DVDs) using floppy diskette images as the "boot media" I updated the "distribution" again to support mounting a local optical disk and streaming the image off a bzip2'd ntfsclone image. I even added some silly multi-disk "spanning" capability for images >4.7GB. (It was very janky and involved recombining the image chunks in a temporary partition on the local drive, then imaging the machine from that local copy. The I/O contention of reading / writing from the same drive made that very, very slow.)
Finally, when PXE-capable NICs were more common, I would PXE boot the "distribution" (because PXE easily supported booting floppy disk images) and modified it to pull from HTTP, local optical drive, or udpcast.
I gave up when AHCI became common because I couldn't keep up with making the "modern" Linux kernels work with the various models of PCs I was using. I moved over to a Windows PE-based tool in about 2006 - 2007.
I always had a muLinux disk handy in my computer toolbox. Most of its shell commands came from a simple script ingeniously written by the distro's author. It's been around since the mid-90s, I'd guess.
This project has a website that was previously posted on HN[1], I (unsuccessfully) tried to boot it on an actual 486 machine[2], as the site boasts about supporting that.
The version of the SYSLINUX bootloader that it uses had a bug in the fallback path if E820 memory information is not available from the BIOS, and the BIOS on my machine indeed does not support it, or E801 for that matter[3].
I have not gotten around to further testing and fixing the actual issue in SYSLINUX yet (also one of the RAM sticks has sadly developed a parity issue, so I'm stuck at 16M for now). However, I did manage to dig up a newer 486 machine[4][5]. From some testing just this weekend, the BIOS on that one does support INT 15h, AX=E820. I'll have to dig up more memory, but I'm looking forward to another round of trying to get this to boot on the actual hardware, once again :-)
Yggdrasil started off as an 18+ floppy distribution, but it was the first distro to allow booting a full rootfs from a CD .. and man, was that ever amazing back in 1994! Was worth the upgrades to turn my 486 into a functioning X server ..
When i was 12 or 13 in the very early 2000s i tried to download something called “coyote linux” (from sourceforge iirc) and boot it on an internet cafe pc because i really wanted to try this linux thing.
But i was very nooby and of course it mostly didn’t go anywhere. I have vague memories of maybe getting it to boot, getting a shell and then not know what to do with it.
I used to run tomsrtbt (https://en.wikipedia.org/wiki/Tomsrtbt) from a floppy on an old 486 hooked up to a monitor and keyboard for use as a terminal. Was nice and silent, pretty convenient to be able to just turn the screen on to check irc or whatever.
Thanks again for being featured here!
Nice to read all of those comments. The project goal is more to learn how to make your own Linux distribution than to fit as much as possible on a floppy. It is fun to have a fully working OS at the end of this learning experience. Floppies are easy to use and just cool :)
There are a lot of better suited distributions for size and memory usage. What makes FLOPPINUX stand out is the complete tutorial to follow and then make your own changes on top of it. Learn and have fun!
I wonder why it needs 20MB minimum. Back in the day linux 2.0.33 would boot happily into a GUI and everything on an 8MB machine.
Or maybe I misremember... I know my machine at the time got upgraded to 24MB so maybe it was that machine I was running.
Anyway it's neat this can still be done.
I'm going to guess from the size of the kernel, since for distribution it has to be a fairly 'generic' kernel with just about every driver built into it. If one were to compile a custom 6.14 kernel for a specific hardware target with only 1 model of NIC (3c509b for example), etc, it could be a lot smaller.
Why does the number of drivers compiled in affect memory use? Shouldn't the kernel just load what it needs and ignore the rest?
If it's compiled into the kernel it'll occupy memory regardless if it's being used. If it's built as a kernel module then it doesn't occupy memory until loaded.
I think you could run 2.0 + X11 in 4MB in a pinch. I know I ran 2.2 + X11 in 5MB on a cast-off i386SX; tight but useable. If I recall right, 2.0 & 2.2 would run in 2MB without X11 (but a GUI like MGR might fit). 8MB was pretty good and 16MB was positively spacious.
Edit: Add: 2MB/4MB boot with a stripped down kernel, not generic.
I got 2.2 with BusyBox to consume ~2200K at boot after a lot of fiddling. Left me plenty of user space for doing command line work on my 4MB 386; i mentioned in another comment though, X was only really useful as a remote terminal in 4MB, to run a local program via X pretty much required 8MB. But pretty sure i got Doom running in X on 8MB...
I did all these experiments a year or two ago. I lost most of my work due to a hard drive failure (the one in my workstation, not the 386 lol) but all the surviving work is on my github:
https://github.com/queenkjuul/basiclinux-lcars
You could run X11 in 4Mb at one point, although I rather wished I didn't.
Yikes-- bringing back memories of frustration. X11 on my 486SX w/ 4MB was excruciating. It would swap like crazy. Adding 8MB more RAM made such a difference. Kernel compiles were much less swappy, too. (I can still the buy I bought the four 2MB 30-pin SIMMs secondhand from but I can't remember how much I gave for them in 1993 or 1994. I feel like it was more than $100, though...)
That's not even big enough to hold a single 1080p framebuffer.
Not at 24bpp, but maybe at 8bpp?
Yes. Also X in 1bpp was not even rare (e.g. Sun bwtwo).
Indeed. So far as I recall I had a greyscale monitor that couldn't do more than 800x600. I think it was a 486sx and I probably still had a 32GB MFM hard disk at that point so it was a very underwhelming machine.
I think 1MB of RAM in a simm was about £100 at that point, but it's been a while!
The Compaq laptop I was using had a 486SX and 4 MB of RAM. It had a 640x480 (if I remember correctly) screen and I'm pretty sure the framebuffer was in a separate video RAM that was not counted in that 4 MB. Used to type a lot of LaTeX on that laptop and used X11 for previews - xfree86 even had a special driver for the specific video hardware that laptop had. Not sure if I used a window manager. I think I just pointed ghostscript at the X11 screen from a text-mode console.
I had 2.2.x running on my 386 last year in 4MB. Not enough for a full GUI though but enough to set up TCP/IP and Samba to image a drive over the network.
8MB, at least in an emulator, can run a basic Xterm but not a lot else (though it'll happily run as a remote X frontend for a more powerful machine over Ethernet, it was fun to see it try to render Gimp 3 running on my desktop lol)
My 16MB 486 had no issues with a full IceWM session (this was kind of my hacked version of BasicLinux which itself was built on a ~2000 version of Slackware)
if you have an X server running then maybe you can exploit Xorg/X11's network transparency and run heavier apps on a beefier machine.
This floppy decompresses the entire initrd image into memory at boot, which "wastes" memory compared a proper install on a HDD. You can also lower memory requirements further by enabling swap.
A floppy distro (especially one relying on a compressed initrd) will inherently require more memory. And I suspect the maker of this distro is using a different definition of "minimum" than we would have used back in the 90s (closer to "recommended").
However, it looks like modern linux kernels just require more memory; The kernel binary is certainly larger, floppinux is spending an entire 888KB on it's very stripped down modern linux (doesn't even have networking enabled), while older floppy distros using 2.2/2.4 kernels keep it under 512KB (with networking, and a bunch of other features.
Confirming.
Also the goal was to run LATEST kernel with no changes - just config. With other compression algorithms it was impossible to fit everything into a floppy. And I really wanted to have nano and some space to save few files. Without this it would be totally not usable OS.
I remember around 2002 running my home router without any hdd on fli4l - a single floppy linux router distribution. I slept in the same room as the router was, hence I wanted a solution without a noisy hdd from that era.
Was the floppy quieter than an HD?
Probably only used the floppy to boot into a ramdisk.
Exactly.
When it wasn't in use, yes. Even when it was the noise it made was a lot softer than the dentist's drill of a hard disk spinning up.
At the same time, I was running a home router without any HDD on LRP, Linux Router Project, which was a distribution from Swansea Linux, and was a floppy image, that decompressed into RAM, and then chrood to the RAM image. Really nifty, except for the 486 machine had a Pentium Overdrive, which was vulnerable to F00F, and we got owned... only to reboot again, and back to our normal image.
Since it had no hard disk, and no monitor, it was quiet, and used little power.
I used Freesco another single floppy distribution around that time. I tihnk I had in on old pentium 66 MHz
There was also tomsrtbt[1], which was a staple in my "rescue" floppy collection. Along with the QNX floppy[2], which came in super handy when using a cyber café or a friend's PC, and you wanted to avoid all the keyloggers and malware.
[1] https://en.wikipedia.org/wiki/Tomsrtbt
[2] http://toastytech.com/guis/qnxdemo.html
Trinux was another such utility. It spanned multiple floppies, but booted to RAM and could effectively run from one. The additional disks were for additional tools/utilities.
Still apparently available on Sourceforge.net, though last updated in 2013:
<https://sourceforge.net/projects/trinux/>
Every time i pull out my tomsrtbt floppy i try to pronounce tomsrtbt in my head and it's always different
Tom’s sherbert tastes delicious, I’m sure, but it’s a strange name for a Linux distro.
Freesco router floppy disk distro in 386 with 2MB of RAM and no hard disk. You could pull the floppy for a secure read only router.
I remember some people booting firewalls off CD-R's. Burn a new one when it needed an update. Booting with no writable media at all, truly an immutable distro.
I guess I made a floppy-based "distribution" of Linux back in the late 90s without even realizing it.
I built it to do network-based disk imaging of fleets of Windows 9X PCs in a K12 school district. I used udpcast[0] to receive the image of a FAT32 volume (as a raw dd of the source drive gzip'd) and would stream it in realtime (decompressing and writing) to the hard disk drive on the clients.
I would run the udpcast sender on a "gold master" PC and stream its drive out to as many clients as I wanted (over 10Base-T Ethernet at the time, but later over faster networks). Since the sending PC's CPU was typically the bottleneck the receiving PCs never had problems falling behind receiving and writing the stream.
The most time consuming part of this "generation" of the tool was writing all zeros to the free space on the "gold master" computer to minimize transferring "slack" space (since I was just using dd and not a filesystem-aware tool). I'd mount up the drive in a Linux distro and dd from /dev/zero to a dummy file on the volume until it was full, then delete the dummy file. (One of Jeff's axioms of computing in play: Never underestimate the power of stupid technology.)
I updated the "distribution" in the early 2000's to support NTFS using the various ntfsprogs tools (ntfsclone, ntfsresize) to support imaging Windows XP machines. It was vastly more efficient than the dd method because it only transferred the used blocks of the filesystem.
Since you could make bootable CDs (and later DVDs) using floppy diskette images as the "boot media" I updated the "distribution" again to support mounting a local optical disk and streaming the image off a bzip2'd ntfsclone image. I even added some silly multi-disk "spanning" capability for images >4.7GB. (It was very janky and involved recombining the image chunks in a temporary partition on the local drive, then imaging the machine from that local copy. The I/O contention of reading / writing from the same drive made that very, very slow.)
Finally, when PXE-capable NICs were more common, I would PXE boot the "distribution" (because PXE easily supported booting floppy disk images) and modified it to pull from HTTP, local optical drive, or udpcast.
I gave up when AHCI became common because I couldn't keep up with making the "modern" Linux kernels work with the various models of PCs I was using. I moved over to a Windows PE-based tool in about 2006 - 2007.
[0] http://www.udpcast.linux.lu/
I always had a muLinux disk handy in my computer toolbox. Most of its shell commands came from a simple script ingeniously written by the distro's author. It's been around since the mid-90s, I'd guess.
https://micheleandreoli.org/public/Software/mulinux/mu/html/...
This project has a website that was previously posted on HN[1], I (unsuccessfully) tried to boot it on an actual 486 machine[2], as the site boasts about supporting that.
The version of the SYSLINUX bootloader that it uses had a bug in the fallback path if E820 memory information is not available from the BIOS, and the BIOS on my machine indeed does not support it, or E801 for that matter[3].
I have not gotten around to further testing and fixing the actual issue in SYSLINUX yet (also one of the RAM sticks has sadly developed a parity issue, so I'm stuck at 16M for now). However, I did manage to dig up a newer 486 machine[4][5]. From some testing just this weekend, the BIOS on that one does support INT 15h, AX=E820. I'll have to dig up more memory, but I'm looking forward to another round of trying to get this to boot on the actual hardware, once again :-)
[1] https://news.ycombinator.com/item?id=46866544
[2] https://news.ycombinator.com/item?id=46873814
[3] https://imgur.com/a/GCG9jO7
[4] https://imgur.com/a/am486dx4-retrotank-VUOTahf
[5] https://theretroweb.com/motherboards/s/zida-4dps
This is straining my geriatric memory, but I'm pretty sure my first install of Slackware in 1994 involved 18 floppy disks
It was something like that. I can't recall if my first was Yggdrasil or SLS/Slack but it was a stack of floppies in a folder.
Yggdrasil started off as an 18+ floppy distribution, but it was the first distro to allow booting a full rootfs from a CD .. and man, was that ever amazing back in 1994! Was worth the upgrades to turn my 486 into a functioning X server ..
I'm pretty sure I specifically remember I had two disks in my dorm room, and had to buy a pack of 16 from Radio Shack or somewhere.
2000 Coyote Linux keeping a whole university network going while running from a floppy disk joined the chat.
The idea is cool but anything nowadays has USB ports, there is no suck solution to run from those devices.
I wonder why the 486 DX is supported but not the SX. How is the math coprocessing unit necessary for kernel and basic system tools?
The distro would have to include FP emulation software for the 486 SX, which is a big chunk of code if a floppy disk is all you have to work with.
Also, some system tools need FP support (like df).
exactly that: too complicated.
also I got 486 DX2/66 as my first PC so I set that as a goal. Then checked how lower can I go. Also I only have 486 DX4 now to test on real hardware.
See also https://distro.ibiblio.org/baslinux/, http://www.tinycorelinux.net/
I built a somewhat updated baslin for CD-equipped systems
https://github.com/queenkjuul/basiclinux-lcars
Aww, it wasn't https://en.wikipedia.org/wiki/LCARS (though thankfully it wasn't the b-word either).
I used to use brazilfw on my server, it was only a single floppy
“Floppydistros” were a thing back in the day.
When i was 12 or 13 in the very early 2000s i tried to download something called “coyote linux” (from sourceforge iirc) and boot it on an internet cafe pc because i really wanted to try this linux thing.
But i was very nooby and of course it mostly didn’t go anywhere. I have vague memories of maybe getting it to boot, getting a shell and then not know what to do with it.
Fun times :)
I remember qnx
Full network stack and a web server on a 1.44MB floppy!
And a Javascript capable HTML4 browser, and a decent-looking and performant GUI desktop too.
It's a shame QNX (desktop) died, used to be way more performant and stable compared to Linux or anything else back in the day.
The problem is it wasn't really compatible with anything else, at a time when DOS/Windows and Unix-likes were the most common.
It was compatible with the radio and crypto equipment aboard my coast guard ship!
Isn't it still alive in automobile/infodesks?
Do you recall which browser?
BrowseX, written mostly in Tcl/Tk, was included in one microdistro. Probably LNX-BBC, per Wikipedia.
<https://wiki.tcl-lang.org/page/BrowseX>
<https://en.wikipedia.org/wiki/Bootable_business_card#Operati...>
QNX is to this day the biggest "floppy" thing I ever saw.
I would love to have a modern recreation of it.
I used to run tomsrtbt (https://en.wikipedia.org/wiki/Tomsrtbt) from a floppy on an old 486 hooked up to a monitor and keyboard for use as a terminal. Was nice and silent, pretty convenient to be able to just turn the screen on to check irc or whatever.