It’s been quite some time since my last post. I’ve been meaning to write more about my old startup, Nitrogen Logic, but as they say life gets busy. But now seems like a good time to start opening up more of the source code that powered Nitrogen Logic. It’ll be slow going, but the first big C release, nlutils, is already on GitHub.
Since Nitrogen Logic was always a one-person show, there’s nobody but me stopping me from releasing, but also nobody pushing me onward. I figured I should finally take advantage of the rare opportunity to add 5+ years of my career to my public portfolio and to the shared knowledge of our industry.
Any time you open source old code there’s a lot of work involved. In Nitrogen Logic’s case there are several major components to open up, each with its own unique needs, and built on a plethora of different technologies:
- nlutils – The C utility library that simplifies writing other Nitrogen Logic C projects.
- knd – The core Kinect image processing server powering the Depth Camera Controller, written in C.
- knc – The web configuration UI server for the Depth Camera Controller (talks to knd), written in Ruby with C extensions.
- logic_system – The automation logic server, written in C, which powers the Automation Controller.
- Palace Designer – The automation configuration UI, written in C++, for configuring the Automation Controller.
- Nitrogen Logic PC Remote – A Java/Swing app for securely triggering commands on a PC from a Depth Camera Controller.
- Ideally, I’d also like to show some of my graphic designs, document all the processes for building and releasing software and hardware, printing labels, making DVDs, packaging controllers for sale, etc.
This is something I’ve been meaning to do for a long time, but there’s a lot to do:
- Reviewing code for anything that shouldn’t be released – Even in a project I wrote myself, sometimes among tens of thousands of lines of code there will still be the odd comment that mentions a customer or vendor by name (e.g. “Quick fix for Bob”), or some other bit of code or documentation that doesn’t need to be made public.
- Cleaning up and updating documentation – I don’t want to just dump all of this code on GitHub and call it a day. Even though I won’t be supporting users of this open source release, I am highly committed to documenting all of the code I write.
- Verifying file comments, notices, attributions, etc. – In the few cases where I used source code from other authors, it’s important to double-check that their copyright notices, licenses, and attributions are all correct. In the majority of cases where I wrote my own code, that also needs to be clear.
- Updating build processes to work with current language versions – Just in the roughly 9000 lines that make up nlutils, I’ve run into several new bugs and errors that weren’t present on the versions of Linux, gcc, and supporting libraries that were current during Nitrogen Logic’s active development. I want to make sure that all the code compiles and all the tests pass, if only out of a personal commitment to software professionalism.
- Revisiting the past – It can be painful to spend time with something that was once so central to everything I did, and didn’t work out the way I wanted. Maybe some day I’ll tell the story behind all that, and then you can all wonder with me where those stolen prototypes ended up. Until then, despite the years some wounds are not ready to be exposed and will remain bandaged in silence for a little longer.
I’m using the GNU AGPLv3 for most of Nitrogen Logic’s major open source releases for a couple of reasons. A lot of this code shouldn’t be reused for new projects and I’m just opening it up for reference. It’s also reasonably common for startups to release an open version of their code under the AGPLv3, while also offering other license options to customers.
If you find something useful and would like different license terms, especially if you’re working on an open source project, just get in touch with me and we’ll see what we can work out.
Also, keep in mind that any newly released open licenses do not apply to the old code from Nitrogen Logic controllers or firmware updates.
Nobody wants to see several years of their work lost and buried on an old hard drive somewhere. I’ve been part of enough canceled and invisible projects working for other companies that I don’t want the same fate for Nitrogen Logic.
Now, all that said, this code will be released with no support! I’ll gladly accept issues and will do my best to consider pull requests, but this is not my full-time job. If something isn’t working for you, you’re on your own :).
Stay tuned for more posts and more releases!