froggey / Mezzano

An operating system written in Common Lisp
MIT License
3.56k stars 188 forks source link

Chaosnet support #203

Open terpri opened 4 months ago

terpri commented 4 months ago

Hello there! Something I have wanted to see in this system for a long time is support for the Chaosnet protocol. If you don't know what Chaosnet is, it's an early local-area network that was developed for and used primarily by Lisp machines, but also many other systems. You can read about it here. I thought Mezzano, being the modern Lisp machine that it is, would hardly be complete without it!

Aside from hack value, the added benefit of supporting Chaosnet would be the ability to be intimate with many other different kinds of machines, as well as others running Mezzano. Chaosnet enables many different protocols at the application layer, including but not limited to a standardized file server, telnet, supdup (like telnet but better), mail and SMTP, and many fun ones. Chaosnet is designed in such a way that it makes it easy to define new protocols, so there are many possibilities. My intention is to implement it truly at each layer, using the existing Ethernet and ARP infrastructure. It might be desirable in the future to support alternative methods of transport, such as unix sockets on a remote system.

I chose to reference the code for the NCP from the ZetaLisp system, that being the original Lisp Machine implementation. The Lisp Machine Lisp and Common Lisp are very closely related, and I've made the conscious decision to change as little as possible from it, as to ease the porting effort and to help indicate where changes were made. Some parts might seem a bit ugly by modern standards, however I find it's overall quite readable and well-documented; I would at least like to make everything work properly before I go for cosmetics. This same procedure will likely follow for some protocols such as the file server, if and when I decide to implement them.

Having said all that, and having only started to get familiar with the Mezzano codebase, I have a few questions to ask:

Is there any overall style guide? I can pick up on some conventions, such as earmuffs placed on special and constant variables-- I personally find it better to only do this for external symbols, however, and this is generally the style that the code I am working with follows. As long as what's exported from the package follows the overall style (if there is one), it should be fine, right?

Since I am hoping to incorporate code derived from another system, what's the policy for license attribution? ZetaLisp is distributed under a BSD 3-clause. I don't want to have to clutter everything with copyright stuff if I don't have to, but I think proper attributions will be in order.

ebrasca commented 4 months ago

I found this about the style guides that may be useful to you: https://github.com/foxsae/The-One-True-Lisp-Style-Guide

It will be nice to have only one license.

iskamag commented 1 month ago

Since it's an optional extension, with code from a different project, you should make it a separate repo. It would then be added as an MBuild/home submodule. That folder already has BSD-licensed repos, so you'd be fine.

terpri commented 3 weeks ago

Progress update: The implementation has been working for a while now, I've been slowly working on getting the FILE protocol working.

An issue with having it as a separate submodule is that it required some additions to the Ethernet and ARP packages, since it is adding a new protocol at the network layer. I would like to have it in the base system if that's possible, if not I can just continue working on my own fork.

In any case all the code will be MIT licensed like the rest of the system, I figure that I just need to attribute the original code with a file in the relevant directory. It shouldn't require an update to the main COPYING file.

I'll start talking in the IRC to discuss it in further detail, see how we can get it in, and see what other hacks people are up to.