Hi Jelle !
Your post is very interesting and brings forward deep questions about software resilience, durability, human size technique and understandability. The concept of permacomputing (which I did not know) is really worth thinking about.
Time resilience of Ada 83.
I already alluded to this, but it is a strinking demonstration of Ada 83’s value : I passed my thesis in 1988, the subject was about a symbolic simulation software for electronic circuits. The algorithm is very clever using Coates-Mason graphs for extracting complex transfer functions under the form of the ratio of two polynomial functions. When I started in 1985, my polish thesis director had a Fortran program with an exceedingly astute system for calculating 1-connections ; but it was such a pain to understand how it functioned that I spent several months making it well clear amongst common blocks and Fortran arrays. I convinced my director that if somebody else than her had to improve this simulator, it could not stay in this obfuscated Fortan software. Being young and informed of edge cutting software technology, I proposed to reprogram in Ada 83 which was something really new in 1985. So they bought a MicroVax with DEC Ada ; that was a “whaouh” system and I had a real chance.
After my thesis I had to change my occupations to university jobs and the symbolic simulator stayed in the CNET research center in Paris.
About two years ago, tidying old papers, I found a listing book that I had carefully kept aside : a complete very good quality laser listing of my 1988 final Ada software printed at this time on the Multics system laser printer of Issy les Moulineaux. I scanned with OCR all the pages and recovered all packages easily on Linux. Believe it (or not), gnat recompiled it “floup” without problem, 34 years later ! I can today use it on an x64 Ubuntu as in 1988 !
Drifting gnat compiler and over conceptualization with Ada 95
The other example illustrates opposite properties and drawbacks of gnat compiler evolution.
I stayed an unconditional fan of the Macintosh plus and many years ago (around 1997), I reprogrammed the Mac OS from reading of the four “Inside Macintosh” volumes, targeting x86 with an add on powerpc Intel board. A first version written in CodeWarrior Pascal was very elaborate thanks to the very ergonomic and performant CW ide/debugger on Apple’s Mac, but it became difficult to read and maintain alone ; and today I have problems to understand quickly the Pascal code which was also full of peculiar CW Pascal idiosyncrasies. Anyway, Codewarrior system inflated and finally disappeared in its practical form. The Pascal OS software became unusable.
To convince myself of the true nature of C language, I restarted programming the Mac OS in C. I quickly abandoned, it was an horror, much sooner than Pascal it became unreadable and impractical to maintain structuring being inexistent.
So I restarted once again with Ada 95 gnat. But the new object functions offered led me to a conceptual surcharge in the system definition and it became more complicated than the initial Macintosh structure. Wanting to do too well with tagged typed led me astray from simplicity. Especially the memory manager became a strangely complicated module.
And I restarted once more by writing Ada 83 conformant code with only the tolerance of child packages because I did not see how to program system interfaces which could be reused by applications with a table of content jump mechanism and system implementations only present when compiling the system. Constrained by Ada 83, the system was better, conceptually simpler than with Ada 95 and much closer to Macintosh Pascal version.
With gnat 3.15 I could produce a cross system debugged on Bochs and USB bootable on a bare x86. Then gnat evolved, some critical pragma became obsolete, system predefined modules changed and I could not produce the executable anymore, moreover the gnat 3.15 compiler became impossible to recompile with posterior gnat/gcc versions…
Finally, I discovered that conditional compilation for packages was possible inside Ada 83, so that I got rid of the Ada 95 child packages (which moreover complicated the global variables arrangement because child packages promote a sort of multi sub-level access efflorescence, while in Ada 83 variables are only visible from top of module).
So finally, to my complete satisfaction, this Mac OS reproduction wandering exercise brought me back to a pure Ada 83 system on Linux with less files and simpler structure. But I lost cross compilation and execution on an old x86 pc, which I got once with Pascal Code Warrior and a second time with gnat 3.15 ; and twice I lost this opportunity with changing compilation systems.
Conclusion
For your software to pass year decades fresh and pink, to avoid headache when diving in old software, program in Ada 83 !
These are some of the reasons why I got attached to availability of a pure Ada 83 open compiler.
Now this conclusion is especially valid when the developer team has cardinal one or a few and time to think how to do best for durability. With a number of engineers, enough programming power and time constraints, things can be made differently.