Hundreds of new open source software projects are published on Internet each day. The vast majority are built by private individuals in their spare time, or at least this is how the projects are starting. The usefulness of these projects is secondary in nature, most of the time the goal is learning and personal development, or how somebody else put it, scratching one developer’s personal itch.

This blog post is about how to package and publish an open-source project. I have this source code just sitting there on my hard drive, I wrote it some time ago, other people might find it interesting. Let’s start with the itch.

The problem

Many people are very surprised when they find out telnet protocol requires more than a TCP socket connection between a client and a server. There are two tty terminals involved, one on the server side, and one on the client side. These terminals are synchronized by special messages sent over the socket connection, mangled with the session data.

To figure it out, I can start by reading a long list of RFCs, or I can take a shortcut and try to lift it from a wireshark trace:

The conversation between client and server takes place in a special language, with short 3-byte commands starting with 0xff. The purpose of this exchange is to establish a set of common tty capabilities for both terminals. Looking trough the trace, it doesn’t take too long to come up with a scheme where my client responds with WONT to any DO coming from the server, and it encourages the server to DO anything it offers with WILL.

Implemented in C and compiled, the code seems to be working on any Linux or BSD platform. It might have problems with some very old IBM servers and terminals, but I’ve decided to let IBM support them. Instead, I will try to package the software as is, and make it available on Internet. The project name is stelnet and it is hosted on sourceforge.net.