Before I explain my library, I should try to voice my long term goals with it, and how I am organizing it.
My library should be seen as a work of art more than a solid contribution to anything useful. It will be useful, but its driven more by artistic vision than anything else. Every practical use of this is happy coincidence.
To start describing the library layout, I will mention that I like simple things in code. I have always liked how the best tools do one thing, and do it well. I like the idea of combining simple stuff to do more.
My library is not exactly simple, nor small, but it only has few concepts that can be combined with each other, to make cool stuff. Its a bit complex because these few concepts combine like a fractal.
And I want this to be fast, to used by a lot of people at once. Its database driven. Databases can be badly designed. So, I have to not combine all the data in ways that are convenient to me, but organize this to be as fast as possible in the database.
The library is big, it has many things. If I could break this code down, and make many small libraries, I would. But all the parts and themes and abstractions are too holistic, they need each other. So my library will just have to be a single thing. Not really a glop of code, but chunky, with organization.
The library must be as lean as possible. Anything that is not fundamental to the main theme will be done elsewhere. I do not want to overburden this first code with anything too complex, more than the minimum it needs to get by to combine the simple stuff.
I need this single library to allow me to build all the other stuff I dream about. And that requires some thought... I have to think of everything that will come later, and make sure the building blocks are here in the first library. That was hard for me to do. I have been thinking about this for a long time. But now it is correct in my head. I think it will take me about half a year or more to do the library.
So that is the first layer.
The next library uses this first layer. It will add some general concepts that may or may not be needed in other projects, but definately will be needed by me later.
I am making the first two layers open source, using the apache 2 license, because I want some recognition of my work should it be incorporated into other projects. Otherwise I would have made it MIT.
The next layers after that will be a mix of closed and open source. I have some plans to use this library both commercially and with open source, like my plants and animals being shared and living in the browsers and apps. So the next layers do their own things, and have their own licenses. Some uses of this may combine several repos which themselves each use the first layers.
Top comments (0)