Time-stamp: <2015-09-08 21:19:27 MEST>

A Short History of Hacks

This is a by no means complete history of hacks of mine, mostly concentrating on what I did as a kid when I started to explore programming. I might expand on this text sometime, but don't hold your breath.


Just like everyone else, I wrote a number of games as a kid, from single player text adventure games to the obligatory Arkanoid (or Breakout) clone. I remember my sister actually played some of these games. I, myself, couldn't be bothered with playing games, really.

I wrote several MUD type multi-user text adventure games, starting in, perhaps, 1985, when I was 13 years old.

I first read about the original Essex MUD in the British Personal Computer World magazine in 1984 or 1985 and was very impressed. Since I didn't have any access to any computer networks at the time, I just had to write my own MUD.

I started by writing a MUD in BASIC. I wrote several multi-user adventures in some horrible BASIC dialect or another.

Since the BASICs were so braindead, I had to invent things like my own, much faster, subroutine calls by using GOTOs and storing the return line in my own stack.

Frustrated as I was without access to a timesharing system or any computer networks, I was all alone in the multi-user worlds I developed. To make it more fun, I inserted non-player characters that walked around the world doing things.

To make the non-player characters more convincing, they had to do things on their own, even if the MUD was just waiting for me to insert a new command. I figured that instead of waiting for a whole line of input from the user, I could check if there were any characters to be handled, and immediately return to give the non-player characters some time.

In fact, I had invented a primitive form of cooperative multi-tasking, long before I knew there was such a thing.

Since my computer and the BASIC interpreter I used was so slow, it would be quite noticable when a non-player character did something complex. The user would notice that the cursor disappeared for a few seconds.

Of course, I had at the time no idea of how one would actually implement these things or what to call them. I guess kids these days can find out more easily.

The last MUD I created was written in Turbo Pascal in 1986, I think. It may have been my first Pascal program. This MUD, however, was mostly a skeleton compared to the earlier attempts. Sadly, I don't have any of the BASIC code left.

Bulletin Boards

As a kid, I also wrote several bulletin board systems inspired by Torgny Tholerus' original KOM system (originally developed under TOPS-10 in the 1970s). I still think KOM is the number one tool for brainstorming and project followup, but nowadays I mostly use the LysKOM system developed at Lysator, apart from ordinary electronic mail and News, of course.

The first KOM or bulletin board systems I wrote was written in Turbo Pascal 3.0 for MS-DOS on a PC/XT clone. They were never really finished, but one system ran as a BBS for a short while from my parental home in Hudiksvall on nightly hours during a short period, so at least it was usable, in some sense of the word. I guess this must have been in 1986 or 1987.

One later system, which I called MOK, was written in C under Unix as a client/server system with a protocol based on the Forth programming language.

The server worked but, alas, included several design flaws. I never finished a working client, however, but with what I had you could at least login, add and read texts.

The protocol was made up of Forth words and the server more or less contained an interpreter of the Forth programming language. One idea I had was that you could upload definitions of new protocol requests in the form of short Forth programs and later call them by name.

Those days, of course, I had never heard about SQL's "stored procedures", but that's more or less what I invented.

Many people those days had problems understanding that you could do several things at once in a client/server scenario, unlike the traditional terminal connection to a BBS. In my system, especially, I had a way of simultanously downloading a file while the user kept on reading and entering texts. This, of course, is a no-brainer in modern computer networks, but it was a big deal in the dial-up modem world of old.

The protocol itself could work over any fairly reliable full duplex link and I had imagined to use it directly over modem connections and, in the last version of the server, over TCP/IP.

Fractals and Conway's Life

During secondary school, at what was later to become the Broman school in Hudiksvall, I was obsessed with Chaos Theory, the science of fractals and, of course, I just had to write a Mandelbrot generator, just like, I guess, every other young hacker on the planet.

I believe the Mandelbrot generator I wrote was the first to use the new graphics capabilities of the new computers at my school, although the generator itself wasn't very fast.

In secondary school, I was also interested in Conway's Game of Life and did some experiments, setting up gliders and all the traditional stunts and trying to change the Life universe and improve the programs I used to watch it.

Terminal Program

Some time in 1989, I was asked by a teacher to implement a full screen terminal program to be used on a computer in the school library to call the city library central Unix system. I believe my program was still in use when I left the school in 1991.

I don't know what happened to the dial-up terminal program after that. For all I know, it may have been in use until the school got a an Internet connection in the middle of the 1990s.

The MGR Window System

Some years ago, I used to hack some on the MGR Window System, a lightweight network window system originally developed for Sun workstations by Stephen Uhler, at the time at Bellcore and now, I believe, working for Sun. I originally discovered MGR when I became a member of the Lysator Academic Computing Society in 1991.

I used to sit in front of a Sun 3/60 in the underground headquarters of Lysator at the Linköping University in my first years as a student and, since, the 3/60s were very heavily used and didn't have a lot of RAM, running X was out of the question, really. MGR was a good choice, so as not to spoil the nice, large 19" monochrome screen.

I have since done ports of MGR and associated tools to Solaris/SPARC and Linux/SPARC, made various patches to the server and various utilities.

I have long since stopped using MGR and, like everyone else, I'm afraid I'm nowadays stuck with the X Window System. I've done some quick hacks on commonly used window managers, such as twm, ctwm and 9wm, and also some changes to other X utilities.


I have had an interest in the implemention of the Forth programming language and I have written several Forth systems, experimenting with different implementation languages (C, various assemblers and Forth itself), different threading systems and tried to create or modify native systems to run on the bare metal as an alternative operating system.

Of course, I have also been active in discussing these things with other Forth hackers and I like to believe I may have influenced some of them, like for instance the HX bytecode format in Hans Bezemer's 4th implementation of the language.

I keep some of my software available that you can snarf if you like.