|
Written by Adam Dunkels,
Tuesday, 05 December 2006 |
|
A lot of people know about Contiki and today it may be mostly known as an operating system for networked embedded systems. But did you know it all started with the world's smallest web browser?
Contiki was originally just a small hobby project of mine. With experience from my embedded TCP/IP stacks lwIP and uIP, as well as the really small Miniweb web server and TCP/IP code, I started thinking about the possibility of writing a really small web browser. I thought about this on the train back and forth to SICS and after a few weeks I realized that it probably would be possible to write a really small web browser on top of uIP. However, most really small embedded devices don't even have a means to display web pages (no screen!), much less anything resembling a mouse or keyboard. So if I wanted to try my ideas out for real, I needed some other type of hardware as my target platform.
 Contiki 1.0 on Slashdot So I chose the Commodore 64, the world's most sold home computer. A 1982 design with 64k RAM, 320x200 screen, 16 colors graphics, a keyboard, a joystick, and an optional tape or disk drive. Peter Eliasson and I had already created the world's first Ethernet card for this machine in early 2002 so it was now actually possible to connect it to an Ethernet LAN. And with uIP is was possible to communicate over the Internet. All that was needed now was the really small web browser.
 IRC client I wrote the embryo of Contiki in evenings and week-ends during the fall 2002 and managed to write a really small web browser that would fit in the memory of the Commodore 64 and be able to request web pages with HTTP, parse the HTML code, and display the web pages on screen. With very minimal formatting, but with support for HTML links and HTML forms. It was possible to use Google with the browser. To display web page elements such as web links, forms, and buttons I wrote a really small graphics library and called it CTK - Contiki ToolKit. With a total memory footprint of less than 10 kilobytes it may very well have been the world's smallest web browser.
 Networked desktop on an MSP430 with 2k RAM But the web browser, uIP, and the small graphics library didn't fill up the 64 kilobytes of RAM. Since I of course wanted to use the full potential of the machine I added a windowing system and a few other applications: a telnet client and a web server. And I wrote a small operating system kernel to be able to support the multiple concurrent applications. The first version of Contiki did not have any disk I/O, but it already supported dynamic loading and unloading of new processes. (Disk I/O was added a few weeks after the first version of Contiki was released.)
 Processes Now, what about a name for this? I thought long and hard and finally came up with the name Contiki, coming from Thor Heyerdahl's Kon-Tiki raft. The name was a pun on the large web browsers of the PC world: Navigator, Explorer, Konqueror. Pompous names for large-scale software for navigating the web. In contrast, the Contiki web browser showed that is was possible to browse the web with a really, really tiny amount of computing resources; and ancient computing resources at that! Sounds a lot like the Kon-Tiki journey, doesn't it? ;-)
 Pre-1.0 webserver Before releasing the first version of Contiki in the spring of 2003, I contacted a bunch of developers that could potentially be interested in porting Contiki to other platforms. Contiki was designed to be inherently portable as I had developed it in C under FreeBSD and only very late in the process had I written the glue code for making it run on the 6510 CPU of the Commodore 64 using the cc65 C compiler.
 Networked desktop on AVR So when I released Contiki 1.0 on March 10 2003, it already ran on a bunch of different platforms (all more or less obsolete :-). When Contiki was released, it really made headline news all around the world. But that's another story... |