Home
About Contiki
Download
Instant Contiki
Install and Compile
Documentation
Publications and Talks
Contiki Projects
Mailing lists
Changelog
uIPv6 FAQ
Statistics
Visitors: 2032557
Article Categories
Current Events
Developers
Events
News
Perspective
Platforms
Projects
Tutorials
All
User Menu
Profile
Login
Syndicate
The History of Contiki Print
Written by Adam Dunkels, Tuesday, 05 December 2006

Image
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
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
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
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
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
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
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...

 
< Prev

Adam Dunkels (contact)