Just for the fun of it, Tommi Leino a.k.a. "namhas" has been coding on free time since 1990. Tommi still actively develops various command line tools, X11 clients, embeddable libraries, Internet services and multiplayer games. Tommi maximizes the time for the fun part, the coding itself, by limiting online time and by building environments and tools that allow the least potential for distractions and disruptions, helping to stay focused at the task.

Some of these projects are published under a non-restrictive open source license allowing commercial use. A smaller percentage are published under a copyleft-license. Rest still require work before publishing under any license. Several of the projects are only useful for retro-computing, retro-gaming or source code archaeology interest.

Minimal or zero external dependencies are required apart from requiring POSIX-compliant base environment with the standard tools installed. This means everything Tommi has developed should compile and run with minimal effort on most sane operating systems with the standard development tools installed. Tommi personally develops on OpenBSD using the C programming language, avoiding choices that would decrease portability or increase risk for incompatibilities over time.

You can help by submitting patches that fix bugs, bring features, or you can become a package maintainer and submit any of these projects for your favorite operating system's package collection. (If you wish to become a package maintainer, please contact me so that we could agree on a release model because most of the projects have none.)


Statistics of the published original source code that is stored in GitHub.

Projects published: 43
Published lines of code: 192658
Total commits: 939
Commits from contributors: 148
Last updated: September 29, 2022

LPC          120150 lines (top: majik3)
C             54084 lines (top: vtsh)
C++            9939 lines (top: majik3d-client)
HTML           3340 lines (top: majik3)
Shell          3048 lines (top: majik4-client)
Java            809 lines (top: jicra)
Roff            399 lines (top: mxswm)
M4              399 lines (top: majik4-client)
Javascript      312 lines (top: majik3)
AWK             178 lines (top: purehtml)

This is about 3210 A4-sized pages if printed out. That would weigh about 16 kg as a 20 cm tall stack if printed as single sided sheets.

Multiplayer games

Majik 3D MMORPG a.k.a. Majik MURPE (1995-2002)

Project founder, leader, designer and one of the core developers for a massively multiplayer online role-playing game and its tools (such as custom collaboration tools for managing the development). These still work and can be set up and play tested.

Visit Majik 3D MMORPG for more information about the project. You can also play the text version from 1998.

Source code:

Also see iosplit which can be used as a simple MUD client and simulbaud which can be used for slowing down output.

A game avatar looking over a great chasm. The Linux penguin-mascot taking a picture of three other Linux
mascots on a green landscape.
Screenshots of the closed-source and the Open Source Majik 3D MMORPG.

Multi-color text-based game view showing a battle in progress,
a character-based minimap, area's description and the player's statistics. Multi-color text console view showing a description of the room,
a character-based minimap and a character-based wilderness map.
Screenshots of the earlier text-based roguelike and MUD versions of Majik.


Helped to set up Spellbound MUD, which was based on Majik 3 codebase.


A parody of a MUD. This game was about making "exp" (experience points), not caring realism. For making it even more hilarious, it is translated to Finnish in the most straight-forward manner. Even though the developers of Majik were attempting to develop a game that would not have "exp-making", this EkspaMUD game actually became more popular than the other versions. You can play it using telnet.

BatMUD (1997)

Software developer (wizard) of BatMUD game, developing in-game environments for exploration. Still works.


tfmud is a "text first" Multi User Dungeon engine which attempts to take the utmost advantage of the text format without polluting the game with any sort of 2D/pseudographical elements. See Majik 3D MMORPG's future page for more information.

Other games

Over the years developed or contributed to various text-based and graphical games on Linux, Unix, Windows, Amiga, C64 and NES platforms. See Mobygames for developer profile listing some contributions.

Linux distributions

Debian Linux (1997-1999)

Debian Linux package maintainer. Debian contributor profile. Packaged and maintained Pike dynamic programming language for Debian Linux distribution.

Network pioneering

Znet UUCP network non-profit (1995-1996)

Founding member, chairman and a software developer of a non-profit organization that was running Finland's largest UUCP network for getting data transmitted between bulletin board systems in batch runs, and for enabling people to have an e-mail address in the age of dial up connections when many people couldn't afford to have a real e-mail address.

Among other things, implemented FTP over e-mail, WWW over e-mail and similar gatewaying and convenience systems for getting most of batch-run e-mail.

BBS software developer and operator (1994-1996)

System operator and software developer contributor for a public non-profit Unix-like remote shell a.k.a. "bulletin board system" and its software and accessory tools in the age of dial-up Internet for people without real Internet connection. The system was unique because it imitated a real Unix shell on a non-Unix operating system on a resource constrained low-end computer yet provided all the services people were expecting from a "bulletin board system" or from a free-access Unix shell, including message boards, realtime chat, multiplayer games, files.

Contributed changes to most parts of the system and implemented new tools, such as a new realtime chat system, new games with shared scoreboards, a foreign platform's door-game emulator, a new terminal emulator, a new realtime remote viewing facility of user activity.

Also found and fixed multiple vulnerabilities in software written by others, including remote access vulnerabilities.


Virus-removal tool (1998)

Discovered a computer virus that was not recognized by existing antivirus tools and wrote a virus-detection and virus-removal tool for that virus type.


webgw is a non-caching Web proxy that enforces whitelisting policy by holding non-whitelisted attempts until the user unblocks the connection. The tool is useful for the most paranoid Web users.


xout forwards keyboard and/or mouse input to an X11 window, which may be running a terminal session or serial console to a remote X11 server. Replaying and storing the input is possible. Useful with airgapped computers.


xin receives input from xout. Useful with airgapped computers.

X Window System (X11) GUI programs

Also see xin and xout.


cocowm is a Column Commander Window Manager for X11 Window System that specializes in automating layout management by arranging program windows in columns. Therefore, cocowm is a tiling window manager and in particular is most inspired by the Plan9 acme editor, as well as the Plan B.

This window manager was originally meant to be used in combination with a specialized unpublished terminal emulator by the same author, cocovt, however it is also usable on its own.


mxswm, a MaXed Stacks window manager, is a simpler alternative to cocowm that might be more practical when compared to cocowm without using cocovt.

Screenshot of mxswm.


cocovt is Virtual Terminal for Command Composition. Unfinished / placeholder. Useful with cocowm.


vtsh is a mashup of a virtual terminal and a command interpreter a.k.a. shell for Unix-like operating systems such as Linux. The output of commands go to their own editable and viewable buffers and the output can be used for launching new commands. Similar to cocovt and iosplit.

See animated screenshot of vtsh running ed.

Screenshot of vtsh.


xvbox moves selected X11 client windows to a box and stacks them vertically. Useful with mxswm.

Screenshot of xvbox with two clients.


xrtgauge draws live gauge from standard input data.


xrtgraph draws live graphs from standard input data.


xrtmap draws GPS locations real time on a map.

Example xrtmap result. startup-notification contributions

Software testing tools


crbehave is a behavior driven development framework for C that uses standard regular expressions for matching instead of a specialized system and instead of relying on macros.

Parsers and frontends for data interchange formats

See also purehtml which is a purely HTML-only parser, but it is filed under the Small Internet category here.


dhdb is a multi-format dynamic and hierarchical database for C. Provides an in-memory object system that adds scripting language-like ease regarding common data structures. Can import and export multiple formats such as XML, INI, JSON. Can be used as a general-purpose JSON library. Light-weight, well-embeddable, permissive license. Used in some embedded Linux devices around the world.


dhdb-edit is a simple example of a ncurses-based text user interface for navigating a JSON file using dhdb.


ivjson is an another attempt to a very minimal, nice-to-use JSON API. Lighter-weight and simpler than dhdb.


jsonkv converts JSON files to a simple key-value format for easy grepping, awk'ing, etc.


xmlkv converts XML files to a simple key-value format for easy grepping, awk'ing, etc.


canal is a simple C source code analyzer that can be used in place of cscope(1) for various things.

Network protocol libraries


emws is an embeddable WebSocket server in a way that the source files can be statically linked to a program wishing to communicate over WebSocket. Work in progress: could be updated with a LibTLS-like API and integrated with LibTLS for providing wss-support. Very small and lightweight. Also acts as an example of how easy it is to write WebSocket implementation from scratch.

Other libraries


editbuffer is an embeddable C module / library providing editable buffer container with standard I/O semantics which simplifies cursor handling as the cursor is simply a seek position. It also gives high performance and low memory overhead because of block allocation strategy.

"Small Internet"-related tools


purehtml is a purely HTML-only parser which can be used for e.g. converting HTML to Gemini ("text/gemini") text format.


gemcache is a simple caching proxy for Gemini space that could be used on its own, or in combination with gemsurf.


gemsrv is a simple Gemini server.


gemsurf is a simple interface to gemcache and provides a interface to the Gemini space.


xd is eXtensible eDitor (proof of concept), inspired by ed(1) and edbrowse and can be used as an interface to Gemini space through gemsurf.


gopherd is a simple gopherd that uses chroot + privdrop and separate processes, with pledge/unveil if available.

General Linux/Unix-tools


iosplit manages console stream with separate input and output cursors so that unexpected output will not interfere with user supplied input. The console stream is also editable and can be used non-linearly.

Useful as a MUD client, or when communicating over slow links, or when communicating with line-based protocols such as raw IRC protocol, raw SMTP, embedded devices, etc.


simulbaud simulate baud rates by delaying output.


overlay performs a Unix-like command pipeline, but dumps output of all commands to stdout while adding metadata which specifies which output belongs to which command. Might be useful in some rare debugging situations, or for teaching.


pipebuffer provides low-level configurable pipeline buffering for Unix-like shells that can tell whether it is empty or not.

Chat programs


jicra is a legacy Java IRC Chat Room Applet which provided an interface to IRC "back in the day" without looking like an IRC-client.

Screenshot of Jicra.

System administration tools


shaback is a SHA-checksumming backup/restore tool that is fast and has many features such as deduplication.


deploy contains simple scripts for configuration management.


wtlyzer is a simple standalone Web Traffic Analyzer which draws hits on a world map based on GeoIP results.

Example Wtlyzer result.


xrootname sets X11 root window name from an stdin stream. Useful for monitoring system performance from a window manager status line (which uses the X11 root window name for getting the contents) without being polluted by measurements noise caused by a heavier status monitoring method, such as continuously re-launching xsetroot program from a script.

Other projects

See the repositories in Github.