Floppy booting, Open Firmware, Bitlash, more Movizt.

As a child, I was fascinated by small, intricate things. Wind up clocks and tree seeds were two of my favorites. This continues through my programming. I take a certain pride in making something small, reliable and easy to comprehend. I also take it a bit further than most. Even in college, while surrounded by engineers (who usually like pragmatic elegance), I was teased for writing a dozen three line functions when my classmates used a single 100 line main.

Similar minimalistic styles can be found in artwork, literature and music. These styles are often enforced by the medium. Ink drawings only use crisp lines. Haiku will never ramble on. Saxophones don't play chords.

Sometimes the tools themselves are simple. An ink pen is pretty simple. However, the full interplay of language available to the poet is beyond a single person's understanding. As for music, you know how complicated a saxophone is if you've ever repaired a broken spring deep in the works.

There is a certain appeal in closing the meta-loop of minimalism in programming. Writing simple, efficient code in languages which themselves are simple and efficient. To that end, I've collected programming environments which are small and self contained, while still useful.

Side note: many of these are for x86 linux. If you don't have linux, find almost any old flash drive or memory card. Install Tiny Core Linux to it. Enable USB booting on your computer. Tiny Core is 10 megabytes and uses a highly modular packaging system. There is a copy on the boot partition of every computer I own, for the two or three times a year when I brick a primary partition. Tiny Core is actively maintained and dead simple to extend. It is a good fit with philosophy of minimalism.

Side note two: several of these are bootable floppies. Such disks and drives are a rare breed today, so boot the images with grub. The same trick works for LILO, too. Basically this copies the image to memory, then executes it. There is one downside, changes to the ram disk will not be saved back to the disk image.

amforth is probably the gem of this collection. All you need is a serial connection to begin programming high level embedded applications.



Tiny C Compiler is a very small compiler that very quickly compiles very small x86 binaries. Available for Linux and Windows, use it to build many of the following applications.





Caml Light compiles for windows and unixes. The entire system is about 200kb.

dream Scheme is an R4RS compatible Scheme written in x86 assembly. There are versions for Linux, Windows, and bootable floppy.

Gofer (GOod For Equational Reasoning) is a subset of Haskell 1.2. Very small, very fast, but no GC.

jonesforth is a literate x86 assembly tutorial and forth environment. Public domain, too.

joy is an odd little language. It feels halfway between Forth and Factor. But throw in single assignment and Lisp-style code manipulation, while replacing every flow control statement with combinators.



Little Smalltalk v3 has a non-graphical Smalltalk REPL in 40K. V4 segfaults a bunch, and v5 was biggish.

mini Pico Lisp is basically Pico Lisp but without any libraries.

Movitz is a small (almost) ANSI complete Common Lisp which runs on bare x86. The floppy image works well, but I had some issues with screen width. Asteroids and emacs are available on archive.org, but I haven't tested these yet.

Nasal is a small Javascript-ish language. Get the CVS version, it has an interactive REPL. Compiles down to 80Kb on GCC.

Open Firmware provides a Forth environment and a lot of hooks into your system. The build instructions do not match the current directory layout, but you can figure it out.

Oxford Oberon-2 is the smallest Oberon compiler around. Building from source is a little convoluted, but works on Solaris, Linux, Windows.

SmartEiffel Compiles to C or JVM bytecode. I recommend version 1.1, or the pre 1.0 SmallEiffel.

TinyScheme is mostly R5RS. See the site for optional goodies like sockets, filesystems and regular expressions.