Hey Lyberta, thanks for the reply

Lyberta {l Wrote}:I suggest researching into Unlicense for code and just require any contributions to be Unlicense or CC0.
Unlicense is actually not recommended very much, see e.g. the
FSF's comment. CC0 is currently the best way, though it has flaws -- e.g. though being called "public domain" it only waives copyright, but not trademarks, patents etc., so it sometimes doesn't achiev public domain (I've sent CC an email to fix this and they said they're considering it). This is why I also add a custom additional waiver of
all IP.
Lyberta {l Wrote}:Do you indent all code to be in 1 C file?
Almost. I put most my programs into a single file (I can explain reasons why if you want), but here I have my raycasting library and some pure data in separate files, but I still do have single compilation unit (the extra files are all header imlementations).
Lyberta {l Wrote}:Centuries. Noble goal, I had it in mind for my code too but, given current computer science...
Seriously, we are in infancy and writing code that will work for centuries is just impossible given current programming languages.
I'm glad you say this, I'd like to tell you why I think you're wrong.
Even though everything is evolving extremely quickly and if you want
state of the are you
do have to rewrite your code constantly (wasted work in my opinion), you
can write code to last very well if you give something up. How?
- It is like with old Latin texts. Though they are centuries old, they survive despite constant evolution of human languages and though most people can't read them, they can read translations by others. We need to do something similar here.
- Basically avoid
as many dependencies as possible, HW and SW alike. If your code is million LOD, is written in 20 programming languages, uses 1000 libraries, requires VMs and a fancy build system, special HW features and Internet connection, one of these will likely die in 10 years and you won't be able to easily repair this. Instead do the opposite.
- Use only one,
simple, well standardized and established programming language (C99), best if you use it as a subset of another language (C++, i.e. write it so that it also compiles as C++) and use only basic features of it (so that a not fully conformant compiler can still compile it). This way even though C is no longer used a hundred year in the future, it will be easy to translate it to the new compileable language, or interpret it or whatever. Supposing we'll have
some computers in the future you want to write your code so as to be easily processed and analyzed automatically and require minimum human work (it is very easy to transpile C into whatever language if it uses no libraries and obscure features).
- Use as little libraries as possible, even standard ones. If you need to store something in a file, don't use an XML library, think of how you can write your own very simple format (key:value, ...). 99.9% libraries aren't written to last and have high chance of dying in the future and killing your program.
- Don't depend on any HW if you don't need to. Basically suppose that there is just CPU. Write a SW renderer, not OpenGL one (you can still leave the possibility, e.g. a nice interface, to add OpenGL renderer, but it mustn't be mandatory). Where there is interaction with HW (screen, sound, ...), create a one point at which specific HW can be switched as easily as possible (see e.g. how my
frontends look).
- Don't use a complex build system because that will be dead in a few decades. It is best to have everything a single compilation unit that's compiled by just handing a file to the compiler. This can be almost always be done, it's just a bad habit to create millions of files (blame Java?).
- Keep your code KISS, short and simple. This way it requires less work in case something needs to be manually rewritten, and minimizes the chance of something going wrong.
- And avoid all other dependencies you can think of, not just technological. You can go as far as trying to avoid cultural dependencies (e.g. topics that may likely become controversial and make your game be banned and deleted) etc.
Lyberta {l Wrote}:but those types do not exist on computers with non-8-bit-bytes so your code already is not portable in the "centuries" scale.
Modern 8bits do actually, e.g. Arduino Uno, they just have to emulate these types and are slower, though I don't suppose this game running on 8bits, I think that's either impossible, extremely hard and/or would hurt performace and other aspocts too much. My code is 32bit and I suppose that's what will be available basically forever. You can always run 32bit on wider bit platforms.