COS has some nice features, but most of the time it is lacking basic functionality that would make us competitive in these types of contests.
On top of that, there are no libraries, so you always have to code everything from scratch. Which has a certain appeal to it, but will not not get us close to the leaderboard. The closest I got was place 137 on day22, part2.
Given that mumps/COS only supports the most basic constructs and lacks any modern influence of programming tools, there isn't all that much we can do about that ;)

The configuration structure for apache is actually much more dependent on which distribution you are using than the OS. There are pretty huge differences in the way Ubuntu/SuSE/RH/Centos are setting things up. Even down to some of them calling the system service apache vs apache2 vs httpd. There are also differences with some of them using systemd vs still the old sysvinit.
The good news is, you can always re-arrange your apache config to your liking.

Please also note, setting

        CSP On
        SetHandler csp-handler-sa

Is redundant. CSP On on a path already maps all filetypes to be handled by the gateway. Adding the sethandler doesn't add anything.
If you are omitting CSP On, but use the csp-handler-sa as detailed above, the gateway will not serve static files. Either you will need to add them (ok for low traffic sites), or you will need to configure apache to serve the static files directly (if your apache is not on the same machine as your instance you will need to copy the static files or mount a network drive)

I would also be very cautious of trying to make judgements based on the way people implemented things. For some of the puzzles there are very clear 'best solutions' and one would expect people with the necessary training in data structures/algorithms will simple go with a similar implementation because 'that's the way you solve a problem like that'. I'm sure once we get to harder problems that might change, but for these beginning problems there isn't a good way to fix this.

Bert,
I'd be curious where you get the data points from, I haven't been able to see other people's times. Also keep in mind, sometimes the way you do a solution is a maker/breaker on how quickly you get the second part. Day10 was another great example for that.
I don't think you're accusing me of this since it took me more than 16 minutes to get from part1 to part2 on day7. But just in case you're doubting, here's my code: https://github.com/kazamatzuri/AoC/tree/master/AoC/User
And yes, I did day 2/3 in python ...

Please note, if you are running into permissions issues, that seems to be a windows only problem and can be worked around by creating a derivative image like this:

FROM intersystems/iris:2018.2.0.490.0
RUN adduser irisusr root && adduser irisusr irisusr

And use that.

The errors you might expect look like this:

Sign-on inhibited.
See messages.log for details.

[ERROR] Execvp failure. Executable /usr/irissys/bin//./irisdb. errno=13, file uid=0 gid=1000 
perms=r-xr-x---, user uid=1000 gid=0
Call InterSystems Technical Support. : Permission denied

[ERROR] Possible causes:
[ERROR]  - InterSystems IRIS was not installed successfully
[ERROR]  - Invalid InterSystems IRIS instance name
[ERROR]  - Insufficient privilege to start InterSystems IRIS (proc not in InterSystems IRIS group?)
[FATAL] Error starting InterSystems IRIS

Alternatively you could add those statements to the before parameter, but that seems less elegant.

Thanks,
Fab

creating a new Project and adding the classes/routines you want to export

USER>s p=##class(%Studio.Project).%New()
USER>s rc=p.AddItem("TestPackage.Test.cls")

Of course this could be done it studio as well....

USER>s sc=p.DeployToGbl("^depl","k",1)
TestPackage.Test.cls
USER>d $System.OBJ.Export("depl.gbl","/home/kazamatzuri/deplgbl.xml")

Exporting to XML started on 01/13/2010 08:48:30
Exporting global: ^depl
Export finished successfully.

USER>w

p=<OBJECT REFERENCE>[1@%Studio.Project]
rc=1
sc=1
USER>k

On the customers system .. (I just used another namespace)

USER>zn "TEST"

TEST>d $System.OBJ.Load("/home/kazamatzuri/deplgbl.xml")

Load started on 01/13/2010 08:48:58
Loading file /home/kazamatzuri/deplgbl.xml as xml
Imported global: ^depl
Load finished successfully.

TEST>s sc=##class(%Studio.Project).InstallFromGbl("^depl")
TestPackage.Test.cls

TEST>