How to design BBS with python? reddit / bbs ---------------------------------------------------------------------- Perfect_Show2246 · 2023-04-25 09:38 I just came across BBS. I actually found out about it through cyberpunk 2077. I did some more research on it and it seems really interesting. I have seen the many post on how to join, but what would I need to do to program my own BBS. Thanks ---------------------------------------------------------------------- FeyAnubis_10 · 2023-04-25 10:06 Most BBSses today run off of Telnet. Telnet is an old protocol which exchanges raw, unencrypted data. So you would have to design a custom Telnet server for your users to log in. It would be similar to making a TCP Chat room for the most part (minus the client) plus the menu system. Then, I would suggest taking a look at: [Features](https://en.wikipedia.org/wiki/Bulletin_board_system#Feature s) (Emailing system, Menu system, File area, Chat area, Message boards ) [Some BBS Softwares](https://en.wikipedia.org/wiki/List_of_BBS_software) (Synchronet, Mystic, Citadel) [Evennia, a MUD written in python](https://www.evennia.com/) Hopefully this helped ---------------------------------------------------------------------- TheRealLazloFalconi · 2023-04-25 13:08 I don't mean to be rude, but if you're asking this question, you probably don't have the skills necessary to pull it off. The first thing you need to do to program *anything* in python is understand the problem domain. Go join some BBSes, look at what they're doing. Download some BBS software (many of them are open source) and see how they solved their problems. Think about how you would solve those problems in python. ---------------------------------------------------------------------- analog_potatoes · 2023-04-25 13:44 First, basic ssh and telnet server implementations to the RFC standards. Then implement VT100 terminal spec. Then build up multi threaded application to handle nodes. Then build basic ansi/ascii menu system. Then implement the message and file base database system… I can keep going. Don’t forget your JAM message parser for net mail. Or just download one of the umpteen great projects that are actively maintained and mod them to your liking. ---------------------------------------------------------------------- F_Sblendorio · 2023-04-25 14:01 It's not Python but Java... I wrote a framework, so a developer oriented product, to develop Internet-ready BBSes: https://github.com/sblendorio/petscii-bbs As a demo of what you can do with it, I made Retrocampus BBS (bbs.retrocampus.com port 23 or 6510) which is also accessible via web: http://bbs.retrocampus.com ---------------------------------------------------------------------- UM-Underminer · 2023-04-25 14:31 Writing your own can be a rewarding experience, I've been working on my own software finally this year. To succeed though, you need to have scope before you start. Start by answering some questions both for yourself and for anyone to be able to direct you: 1) What do you mean by programming your own? Do you want to do something different to other available software? If so, what? 2) What is your priority for your software? Is your focus on messaging, networking, door games, or something else? 3) Have you experienced enough BBSes as a user to know what you like and don't like? 4) Do you have any experience writing terminal applications or with relevant communication protocols? 5) Have you experimented with existing software to know what you like and don't? If you can answer the above questions it's easier to direct you a bit. If not, or you're just interested in trying your hand at running a system, then you might want to start with setting up a basic system with something like Mystic or Synchronet. Once you've got a good handle on that, you probably want to spend a bit of time experimenting with some retro packages to give a bit more of an idea of some of the problems you may run into. ---------------------------------------------------------------------- chairmanmow · 2023-04-25 15:06 Here's some BBS software written in python, there may be others, my brain is a little fried. Always helps to be able to look at some code, [https://github.com/jquast/x84](https://github.com/jquast/x84) ---------------------------------------------------------------------- Saxbonsai · 2023-04-25 15:10 There’s a few popular bbs software out there. Enigma 1/2, Synchronet and Mystic are popular sdks. Enigma is based on JS, I think, I don’t know about the others. It’s pretty cookie cutter and just need configuring to get started. I started playing with Enigma a few nights ago and I like it because it can be composed as a Docker instance. ---------------------------------------------------------------------- ghostynewt · 2023-05-09 13:01 Here’s a super simple example of a telnet server in NodeJS to get OP started: https://gist.github.com/bitnetwork/26b3916a0078fa85d3e9aa24df658dfe ---------------------------------------------------------------------- ghostynewt · 2023-05-09 13:15 OP has a long path ahead, but it’s absolutely doable. Who are we to discourage? In terms of curriculum, here’s what I recommend studying: 1. Learn enough UNIX fundamentals to be relatively comfortable with the command line. BBSes came from the UNIX era back in the 70s and 80s, and by learning how to fluently interact with the shell, OP engages in the rich history of text-based systems. See “The Linux Command Line” by William Shots. If you can get your hands on an old Raspberry Pi these days, you have an awesome server and learning environment. 2. Learn how sockets and networking work. You’ll want to start out by building an “echo server” — a server that simply repeats back whatever you send it. Google how to build one of these in your favorite language (I suggest Python but NodeJS is also a good choice), learn how to connect to it and interact with it. (Hint: google around for netcat, a tool for this). Julia Evans’ resources are amazing for this. https://jvns.ca/juliasections/computer-networking/ She also has a networking zine for a nice summary. The classic Bible in this space is Beej’s network programming HOWTO guide. https://beej.us/guide/ Several generations of sysadmins cut their teeth with these crash courses. 3. If you’re serious about letting your friends connect to your BBS, learn about NATs and port forwarding, because your ISP and your wifi router add some obstacles you’ll need to configure. Alternatively, learn about VPNs (not the “private internet access” kind, the “create a network of my own machines I can connect to” kind) and give your friends access. Tailscale is a great way to start. Or alternatively, look into running your own server on the cloud (DigitalOcean is a great hosting service for beginners). Your fluency with the Linux command line will serve you well here. 4. Along the way, start to try to notice OS concepts. If you see a word that sticks out to you — kernel, syscall, poll, thread, blocking vs nonblocking, semaphore are a few ones I suggest looking out for — it’s worth taking a quick moment to look into what they mean. Scavenge meaning where you can. Trust your intelligence enough to be okay reading something that you don’t yet have the context for. It’s sometimes common for skilled hackers to inhale entire tech manuals full of jargon they don’t yet understand, trusting their mind to “fill in the gaps” as they come upon relevant sections. Don’t be scared of lots of words you don’t get yet; that’s normal and you will with time. These are just some good jumping-off points. The biggest thing is that even though it’s 2023, BBSes started in the 1980s, so developing fluency with the sort of technology we had back then — command lines, echo servers, netcat, sockets — is really important. Don’t fall for one-click solutions or YT tutorial videos unless you’re willing to heavily filter out what’s relevant the way a historian scientist would. Good luck! DM me if you have questions ---------------------------------------------------------------------- FeyAnubis_10 · 2023-05-11 06:41 Further more OP could use [ncurses](https://github.com/chjj/blessed), which would forgo having to draw the screen manually everytime :)