This is the bbs101 information page. bbs101 is a DOC style telnet BBS,
developed by Walter de Jong since 2009.
bbs101 is a rewrite of bbs100, which was developed by Walter de Jong since
1999. bbs101 is oldskool bbsing in a modern world.
Technical info -- bbs101 sports:
- a multi-threaded programming model using POSIX threads. The state
machine model that bbs100 uses, really hampers development greatly. The
pthread model allows for a natural program flow, and the developer can write
the code rather easily without having to hurt his brain. The necessary
locking is tucked away at lower levels in the engine, so you don't really
have to worry about it. I also considered a forking (message passing) model
and it's nowhere near as easy and powerful as a threaded model. The only
advantage a forking model has, is that a single instance can segfault without
taking everything down. Well, I'll take my chances and enjoy the benefits of
the threaded model anyway.
- a MySQL database backend. The file system as it was used by bbs100
was fast, but a database is really the way to go. The code is written so that
it should be more or less pluggable, I expect that PostgreSQL can be supported
without great effort.
- a 'dirty' list makes sure that database updates are kept to a
minimum.
- an endless string class named the GString. bbs101 is written in
standard C, and strings in C are cramped little buffers that are not very nice
to work with. Therefore, bbs101 features a growable string so that you don't
run into any trouble when querying the database.
- a List type that turns any struct into a linkable type. This is a
sophisticated programming trick that was stolen from the Linux kernel source,
actually. The lists are circular (never any unwind/rewind needed like in bbs100!)
and highly efficient.
- lists that are really strings of comma-separated values. Although bbs100
was rather CPU efficient by using linked lists everywhere, it was really bad for memory
fragmentation, and in many cases you want it to be a list of comma-separated
values anyway. For things like recipient lists, bbs101 chooses to walk strings
in search for commas, and not calling malloc() for 8 bytes a hundred times per minute.
- support for the DES, MD5, SHA-256, and SHA-512 cryptos, at least as
long as your platform supports these too in crypt(). The default crypto is
currently set to SHA-256, which supports really long passwords.
- clean I/O buffering, as each thread handles its own I/O rather than
having the main process loop, like in bbs100. There is an interruptible read
routine that allows eXpress Messages to arrive while the bbs is waiting on user
input from the network.
- a line editor that supports cursor keys, inserting and deleting
characters in the middle of a line. This is enabled by an input filter that
acts like a keyboard driver. Although it currently only works on single
lines, it is already a huge improvement over the basic editing support in bbs100.
- a separate thread takes care of all signal handling. This is really a
consequence of going multi-threading for this engine.
- the timer queue truly runs its timers asynchronously, because they are
implemented as separate threads.
There is still a lot of work to do, but at least the eXpress Messages (and Emotes) are working
.....
Read the README
Download the source code
The source code of bbs101 is hosted at github