- Canopy now sends out appropriate [content type](https://github.com/Engil/Canopy/pull/23) HTTP headers
- [mirage-http 2.5.2](https://github.com/mirage/mirage-http/releases/tag/v2.5.2) was released to [opam](https://opam.ocaml.org/packages/mirage-http/mirage-http.2.5.2/) which fixes the resource leak
- regression in [mirage-net-xen 1.6.0](https://github.com/mirage/mirage-net-xen/issues/39), I'm back on 1.4.1
- I stumbled upon [too large crunch for MirageOS](https://github.com/mirage/mirage/issues/396), no solution apart from using a FAT image ([putting the data into an ELF section](https://github.com/mirage/mirage/issues/489) would solve the issue, if anyone is interested in MirageOS, that'd be a great project to start with)
- unrelated, [X.509 0.5.2](https://opam.ocaml.org/packages/x509/x509.0.5.2/) fixes [this bug](https://github.com/mirleft/ocaml-x509/commit/1a1476308d24bdcc49d45c4cd9ef539ca57461d2) in certificate chain construction
## Programming
For me, programming is fun. I enjoy doing it, every single second. All the way
from designing over experimenting to debugging why it does not do what I want.
In the end, the computer is dumb and executes only what you (or code from
someone else which you rely on) tell it to do.
To not have to write assembly code manually, programming languages were
developed as an abstraction. There exist different flavours which vary in
expressive power and static guarantees. Lots claim to be general purpose or
systems languages; whether it is convenient to develop in depends on the choices
the language designer made, and whether there is sufficient tooling around it.
A language designed decides on the builtin abstraction mechanisms, each of which
is both a burden and a blessing. They might be interfering (bad design) or
orthogonal (composable). Another choice is whether the language includes a type
system, and if the developer might cheat on it. A strong static type system
allows a developer to encode invariants, without the need to defer to runtime
assertions. Type systems differ in their expressive power, the new kid on the
block is [dependent typing](https://en.wikipedia.org/wiki/Dependent_type), which
allows to encode values in types (list of length 3). Tooling depends purely
on the community size, natural selection will prevail the useful tools.
## Why OCaml?
As already mentioned in [other](https://hannes.nqsb.io/Posts/About)
[articles](https://hannes.nqsb.io/Posts/OperatingSystem) here, it is a
combination of large enough community, runtime performance, modularity,