OrgaDoc - Rewrite and Design


1. OrgaDoc why a rewrite?

When I first started my maintainership of OrgaDoc a number of things caught my attention. One of which was the language of it's sourcecode, Eiffel. I have nothing against this language, it's a very clean and object-oriented language which was perfect for a small program like OrgaDoc. However, over time some issues were not dealt with due to it's absence of a maintainer.

OrgaDoc used an Eiffel library called Gobo for it's regular expressions and other functionality. This library no longer (as of 2017) supported the compiler required for OrgaDoc (Eiffel has non-compatible compiler implementations).

OrgaDoc was written with the Smart Eiffel compiler. This compiler had it's last release in 2009. For release 0.9 of OrgaDoc I used a Smart Eiffel compiler version (SmartEiffel 2.0) from 2004 and a Gobo version from 2004 on a 32bit Debian stable machine to build OrgaDoc. This generated the C code from the Eiffel Compiler so others could finally compile and use the program. Naturally I could not continue development using such outdated and unsupported software.

I spent nearly 2 months attempting to port OrgaDoc to other Eiffel compilers, all of which failed as OrgaDoc's code was so heavily tied to a single compiler that a complete rewrite would be needed. This is when I started to think about another implementation language.

I started a test version in Go (because of it's excellent XML parsing) and this version was an almost fully-working OrgaDoc. But I made the choice to stop development because I wanted more control over binary size and portability. I believe nobody should be left out because of a language or design choice, in running a program.

I spent the next few weeks making more test verions in other languages (Perl and Rust). I then decided to make the final decision to use C as my language of choice.

I chose C because ultimately, it's the language I know best and am most comfortable in using. The standard I chose was C89/C90, because using a newer standard limits users for no gain as OrgaDoc would behave and function the same in C11 as it would in C89/C90 so I made the choice to use this standard to reach as many users and systems as possible. Portability for me is important and I wanted my code to compile and run on as many systems and for as many users as possible.

At the same time as rewriting it, I was modernising what OrgaDoc is used for. Originally it was also capable of uploading your Document Pool to a CVS server so you could download and sync to another machine. In 2002 this was a good idea, not so much in 2018, even your most technical users 'probably' won't have their own home git repository to sync with. This is why I removed that script and it's ability to sync like this.

A better alternative was to use rsync with cron, this way you can sync and have it automated so it's done without you thinking about it. Even rsync is not required and it's trivial to setup a script for ssh and grab what is needed based on filenames and locations.

I will be providing examples of these use-cases during the next few releases of OrgaDoc which further enhances it's usefulness.

2 GNU Free Documentation License.

Copyright (C) 2017,2018 Adam Bilbrough.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''.

3 References.