Floppy booting, Open Firmware, Bitlash, more Movizt.

Original A collection of small programming environments. New additions: Bluebottle, IoL4, Little Smalltalk, Oxford Oberon-2, TinyScheme New additions: Caml Light, Gofer, TFLC. New additions: Nasal, Joy mindtrip. New additions: SmallEiffel, Nasal clarification. New additions: picoOS, pbLua, Dreams New additions: Movitz Lisp, Ocaml Mindstorm Floppy booting, Open Firmware, Bitlash, more Movizt. Editable
version 8 of 8

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.

anon (2009-09-22-12-29-35-890)

sx forth is for AVRs and only needs 8kb flash

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.

Kyle (2009-09-26-13-23-41-090)

Investigate http://nwcc.sourceforge.net/index.html

Kyle (2009-09-26-17-55-38-593)

And another: http://pcc.ludd.ltu.se/

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.

Kyle (2010-08-11-09-30-51-636)

F is very similar to Joy, but even lighter. http://www.nsl.com/k/f/f.htm

Needs K as a backend?

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.

Runners Up

Some of these are not programming languages. Some are languages, but don't run on the metal themselves. Some of them are clever toys, but not useful. Some are redundant. Some are useful, but also comparatively big. Some look awesome, but I don't have the hardware for proper experimentation. They still deserve mention, and if your tastes differ from mine, may even be exactly what you are looking for.

  • a-Linux has a 532 byte http server.
  • BashForth is a portable, no install atrocity.
  • bitlash fixes one of my complaints about the Arduino, by providing an interactive shell.
  • Bluebottle is the very modern OS built on Oberon-2.
  • Chaos Linux is a 6Mb distro for clusters.
  • Dreams is a message-passing Forth.
  • GTK-server can easily give any little program a GUI.
  • Hedgehog Lisp "Never underestimate the power of a small tactical Lisp interpreter."
  • IOCCC x-lisp is a tiny lisp interpreter, which stores all it's data structures as strings.
  • IoL4 merges the IO language and L4 microkernel. Very buggy.
  • Language Zoo contains several different styles of languages written in OCaml.
  • Lua is a common application scripting language.
  • MinForth provides windows, linux, dos and source versions.
  • OCaml Mindstorm runs on the second generation brick, the NXT.
  • pbForth for RCX is a nifty interactive Forth for the Lego Mindstorms.
  • pbLua offers a complete toolchain and is actively developed.
  • Pico Lisp is a very complete lisp system, with many libraries.
  • picoOS supplies a small real time operating system for several platforms.
  • smlisp almost made the cut, but the Modula3 library kills its size.
  • TFLC is a very small and experimental Haskell engine.
  • tinypy is missing all of my favorite features.
  • uBASIC is the only Basic listed here, and only then because it was written by the brilliant guy behind uIP.
  • XS for RCX is a Lisp shell for Lego Mindstorms.
Kyle (2009-09-22-20-36-39-883)

It has been surprising hard finding a single floppy linux which provides more than BusyBox shell scripting. Surprisingly, Tomsrtbt has Lua!

Kyle (2009-09-27-09-46-27-618)

Linux backported to 8086: http://elks.sourceforge.net/

Kyle (2009-09-27-12-10-55-132)

Here is a clever idea. Hack tomsrtbt and replace the normal login init with a interpreted language. http://www.complang.tuwien.ac.at/forth/gforth/almost-native/

Kyle (2009-11-27-10-44-45-857)

Looks like picolisp has a new website, picolisp.org

Kyle (2009-12-22-11-58-13-646)

Superior to tinypy? http://code.google.com/p/python-on-a-chip/

Kyle (2010-01-30-05-38-51-272)

Bare Metal OS: http://www.returninfinity.com/baremetal.html

But I don't have any 64 bit chips to try it out on.

Kyle (2010-02-27-18-14-01-052)

Quest for the smallest Java VM, http://www.harbaum.org/till/nanovm/ is the leading contender.

Kyle (2010-03-17-10-56-19-728)

I think this is about as awesome as BashForth: http://www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/impl/awk/0.html

Kyle (2010-04-25-06-14-16-621)

Another Lisp floppy OS: http://losak.sourceforge.net/

Kyle (2010-08-11-09-38-15-769)

Jim is an 85KB TCL interpriter.


Kyle (2010-08-16-03-09-26-942)

And just to be complete, the two "purest" distros:



Kyle (2010-09-03-08-33-52-439)

I swear I am going to merge all these notes into the page soon. Until then, one more:


Kyle (2011-02-12-20-23-09-151)

LUnix, for the C64 http://hld.c64.org/poldi/lunix/lunix.html

Kyle (2011-03-31-05-12-35-548)

Not a language, but neat: http://www.retroprogramming.com/2011/03/itsy-os-simple-preemptive-switcher.html

Kyle (2012-07-03-20-18-48-687)


kk (2014-06-12-08-03-17-800)


Kyle (2015-03-22-14-57-32-749)

more schemes: armpit and picobit scheme

kk (2015-06-19-20-44-37-247)

PicoLisp on bare metal: http://picolisp.com/wiki/?PilOS

kk (2015-09-04-18-49-26-600)

Picoc moved, https://github.com/zsaleeba/picoc

kk (2015-11-20-03-32-54-641)

Elks lives! https://github.com/jbruchon/elks

kk (2016-08-15-04-57-43-214)


Kyle (2016-09-12-06-26-24-701)


kk (2016-09-12-07-35-37-853)


kk (2017-02-11-08-01-16-728)


kk (2017-03-27-12-10-58-460)