The MajorBBS Emulation Project - Frequently Asked Questions
What is The MajorBBS / Worldgroup?
The MajorBBS (later renamed to Worldgroup) is Bulletin Board Software originally written by Tim Stryker and first released in 1986 for DOS by Galacticomm Inc. Originally the software was written as a demonstration of the Galacticomm Software Breakthrough Library (GSBL), which was a library written entirely in x86 Assembly which allowed many simultaneous serial connections to be managed by a single software instance without the need for a 3rd Party Multi-Tasker such as Windows.
It was the ability to handle multiple phone lines which made The MajorBBS so revolutionary and why it's remembered so fondly today. For many individuals, systems running The MajorBBS (or Worldgroup) were their first experiences interacting with other people, real-time, over a digital medium. The MajorBBS made software such as Chat Rooms and Multi-User Text Dungeons (MUDs) household names.
Why does The MajorBBS or Worldgroup need a dedicated Emulator?
While The MajorBBS was powerful software at the time, it is showing its age at over 30 years old. DOS versions of The MajorBBS and Worldgroup were compiled using a 16-bit version of Borland C++ (with the exception of WG3 for DOS, which is 32-bit – and broke everything). These versions require DOS or an early version of Windows to run properly. Additionally, micro-optimizations at the x86 Assembly level cause issues for psudo-emulated DOS environments (such as DOSBox), so the only option is to run the software in a full virtual machine using VMWare or VirtualBox. Once you have the software installed, you have to configure not only the environment but MajorBBS/Worldgroup to work with TCP/IP to enable telnet connectivity.
There are steps beyond this - but the goal here was to explain why MBBSEmu was created: to eliminate these requirements, and easily unlock access to all this great software without the need of MajorBBS and Worldgroup.
Why not just build off Worldgroup 3.x for Windows?
Worldgroup 3.x for Windows NT is a 32-bit application built for 32-bit Windows. This specific version of Worldgroup, while the most “recent”, was also the last version to come towards the end of the BBS era. Most modules people remember and love were from the DOS versions of MajorBBS 6.25 through Worldgroup 2.0. While some modules were ported/upgraded to work with this new 32-bit version of Worldgroup (MajorMUD, T-LORD, Tradewars 2002), Worldgroup 3.x didn't have the same level of support from ISV's because by the time of its release the Internet was also taking over.
Additionally, if an effort was undertaken to upgrade Worldgroup 3.x to modern 64-bit operating systems, it would no longer be compatible with existing Modules as they're compiled for 32-bit. Because of technical differences, 32-bit DLLs are unable to be loaded or called by a 64-bit process and vice versa. Along with a reliance on a 32-bit host process, these Modules also rely upon 32-bit calls to the Windows Kernel. The only way an updated version of Worldgroup 3.x to a modern operating system/platform would be of any value was also if all the available modules were recompiled from source and upgraded as well.
Because of these and other technical limitations, the only viable method to continue enjoying the MajorBBS and Worldgroup modules we love and remember is through full emulation of the Modules in their current, 16-bit/32-bit form.
How does MBBSEmu work?
MBBSEmu is an emulator inside an emulator. First, the Module itself (16-bit NE Windows 3.0 Format DLL File) is disassembled and decoded. Then the disassembled x86 is executed on an emulated Intel 16-bit 80286 processor, with external calls to MajorBBS and Worldgroup APIs being routed to the second layer of the emulator, which emulates the host software. APIs for both The MajorBBS and Worldgroup (over 1300+!) need to be emulated as well as those APIs included in the Galacticomm Software Breakthrough Library. This is where the lions share of work lies. The diagram on the left visualizes how the x86 Code and The MajorBBS Emulator components interact with one another.
The emulation of host APIs is similar to the implementations in other platform emulators such as WINE and DOSBox.
As more APIs and Opcodes are implemented, and additional x86 Opcodes supported, more modules will be functional within MBBSEmu. So check back frequently for updates!
Does MBBSEmu support Btrieve?
Yes! While it took several months over the beginning of the project, MBBSEmu now has a very robust Btrieve engine that is able to not only extract information from the original Btrieve .DAT files included with MajorBBS & Worldgroup modules, but also has full support for the Btrieve API. This means modules that made extensive use of Btrieve will be fully supported within MBBSEmu!
MBBSEmu supports Btrieve by converting the original .DAT files to SQLite using the .DB extension. This means a PLAYERS.DAT file will be converted to a PLAYERS.DB SQLite Database the first time the file is opened, and the .DB SQLite Database will be used from thereafter. This leaves original Btrieve files copied in from backups or from other sources in their original state without having to worry about maintaining backwards compatibility. Additionally, because MBBSEmu stores the Btrieve data in an easily accessed SQLite tables, it's even easier now for Sysops and players to access and modify the information without having to rely on decades old tools or being Btrieve Wizards themselves!
For more information on how MBBSEmu handles converting MajorBBS and Worldgroup Btrieve files to SQLite, please see the article on SQLite Database Specifications.
What technology does MBBSEmu utilize?
MBBSEmu is written in C# using .Net Core. This allows MBBSEmu to be cross-platform and support multiple operating systems such as Windows and Linux, as well as multiple hardware platforms such as x86-64 and ARM. This means you'll be able to host your favorite MajorBBS or Worldgroup modules on even a Raspberry Pi!
Is MBBSEmu Open Source?
Yes! MBBSEmu is Open Source and on GitHub for the entire community to help grow! You can check us out on GitHub!