Splitting Industria

Written by Gwen Weinholt on 2017-01-14

Recently a friend lent me the book Start With Why by Simon Sinek. It made a lot of sense to me and made me look at my own projects in a new light. The Industria libraries is a set of libraries for R6RS Scheme that do, well, quite a few different things. There’s cryptography, compression, a few network protocols, various things, but also an assembler and a few disassemblers. It has many things, but it doesn’t truly have a “why”.

The original idea was to make pure Scheme implementations of things that are needed by user space. Libraries for those things that are needed at the base of an operating system, and everything that’s needed to communicate with computers running other modern operating systems. So a few things made sense to add. But at some point there were unnecessary things added (e.g. the broken FiSH crypto protocol for IRC), and at some point the complexity of multiple systems is just too much to contain in a single project (the DNS libraries languish, the TLS client is not up to date, etc).

So the original “why” got lost at some point. And now the project can move in so many different directions that it’s not clear what, if anything, should be done.

That’s the background for my decision to split Industria into multiple projects. The first split-off is the the machine-code project. This is where Industria’s assembler, disassembler and object code libraries have moved. To get some momentum into this project I’m also writing a new disassembler for 64-bit ARM which will be released soon.

There are a few other mega projects like Industria in the R6RS world. I think it would be beneficial for more projects to do similar splits. Of course, this will increase the need for a proper package manager and, more importantly, a public package repository. But I see that as a positive side effect. I think that we need to experience some discomfort before we can gather enough motivation to improve our infrastructure. There is already Dorodango, but I’m not aware of a public package repository for R6RS. I think that would be an interesting project in itself.