Top all-time · #784
Thomas Leonard's blog
Personal blog · roscidus.com/blogprogrammingsystems
Thomas Leonard's blog is a personal blog at roscidus.com about programming and systems. Since 2009, 82 different Hacker News readers have linked it 137 times, most often “Python to OCaml: Retrospective”. It is still writing: the last post was on 2026-03-28, and you can follow it by feed.
Sometimes recommended · 11 of 40 sampled comments recommend it?
Why HN links it
Thomas Leonard's OCaml writing, especially the Python-to-OCaml rewrite series of 0install, is valued as the best case study of a gradual language migration, and his OCaml and capability-security posts are cited as references.
- Recommended for · 11 comments
- Called the best article of its kind and an interesting read; one commenter says it convinced them to learn OCaml.
Summarised by Claude from a sample of 40 HN comments that link here. Each comment is marked recommending, critical or neutral (citing without judging); how this works.
Most-linked posts?
- Python to OCaml: Retrospective18 people · 22 mentions · first linked 2014-06-06
- Choosing a Python replacement for 0install13 people · 15 mentions · first linked 2013-06-10
- OCaml: what you gain8 people · 9 mentions · first linked 2014-02-13
- A Unikernel Firewall for QubesOS6 people · 7 mentions · first linked 2016-01-01
- /blog/blog/2013/09/28/ocaml-objects/4 people · 5 mentions · first linked 2013-09-29
- CueKeeper: Gitting Things Done in the Browser4 people · 4 mentions · first linked 2015-04-28
- Qubes-Lite with KVM and Wayland4 people · 4 mentions · first linked 2021-03-07
- Polymorphism for beginners3 people · 4 mentions · first linked 2013-12-21
- Python to OCaml: Retrospective (2014)3 people · 4 mentions · first linked 2022-12-30
- Replacing Python3 people · 3 mentions · first linked 2013-09-29
What Hacker News says?
This sounds like a good idea. But change should happen gradually - no to parallel versions. Like author of zeroconf, when he was rewritting in in OCaml: http://roscidus.com/blog/blog/2014/06/06/python-to-ocaml-ret...
Comment linking /blog/blog/2014/06/06/python-to-ocaml-retrospective/
on “Firefox.html: Rebuilding Firefox UI in HTML”Submitted My First Unikernel as a story · 267 points
HN discussionIn what way are [1] not “full OSes”? They’re minimal templates, but afaik they still run systemd, the kernel, etc. needed to boot the standard Linux systems they are. When I clicked the link I was expecting something like a unikernel, eg https://roscidus.com/blog/blog/2016/01/01/a-unikernel-firewa...
Comment linking /blog/blog/2016/01/01/a-unikernel-firewall-for-qubesos/
on “Multiple new macOS sandbox escape vulnerabilities”Submitted Python to OCaml: Retrospective as a story · 235 points
HN discussionWeb browsers are at least somewhat sandboxed - they have to be. (I'm not sure about adblock - it blocks some threats in an ad-hoc way, but it might add an exploitation vector of its own). QubesOS is only a little bit more sandboxed than a web page; it's relying on Xen (which has a poor security track record) and mostly still using commodity OSes written in C for the insides (though there is some hope e.g. http://ros…
Comment linking /blog/blog/2016/01/01/a-unikernel-firewall-for-qubesos/
on “How to Compromise the Enterprise Endpoint”Submitted OCaml: what you gain as a story · 198 points
HN discussionRust's type system is a bit less awful, and it's better oriented towards immutability-by-default. Its concurrency model is more explicit (which is to say, more verbose to use, but gives you a lot more control). In a situation where Go is acceptable (i.e. GC is acceptable) you should probably be looking at OCaml (probably what I'd recommend; http://roscidus.com/blog/blog/2013/06/09/choosing-a-python-r... may be worth…
Comment linking /blog/blog/2013/06/09/choosing-a-python-replacement-for-0install/
on “Program your next server in Go”Submitted Python to OCaml: Retrospective as a story · 196 points
HN discussionI'd love to see software adopt strong capabilities-based models that enforce boundaries even within parts of a program. That is, with the principle of least authority (POLA), code that you call is passed only the capabilities you wish (e.g. opening a file, or a network socket), and not everything that the current process has access to. Thomas Leonard's post ( https://roscidus.com/blog/blog/2023/04/26/lambda-capabili…
Comment linking /blog/blog/2023/04/26/lambda-capabilities/
on “Less is safer: Reducing the risk of supply chain attacks”Submitted Replacing Python as a story · 173 points
HN discussiondropbox, considering their size, is really in a position for a solid rewrite. ocaml ? http://roscidus.com/blog/blog/2014/06/06/python-to-ocaml-ret... nim ? rust ? go ?
Comment linking /blog/blog/2014/06/06/python-to-ocaml-retrospective/
on “The new Dropbox”Submitted Using TLA+ to Understand Xen Vchan as a story · 148 points
HN discussionHave you used OCaml? It's a quite different experience than C#. See http://roscidus.com/blog/blog/2014/02/13/ocaml-what-you-gain...
Comment linking /blog/blog/2014/02/13/ocaml-what-you-gain/
on “Dynamic type systems are not inherently more open”Submitted Qubes-Lite with KVM and Wayland as a story · 141 points
HN discussionThere's a larger amount of overlap with https://spectrum-os.org/ (which builds on Nix). https://roscidus.com/blog/blog/2021/03/07/qubes-lite-with-kv... is also really interesting (and discusses Nix and SpectrumOS) and itself was discussed at https://news.ycombinator.com/item?id=26378854
Comment linking /blog/blog/2021/03/07/qubes-lite-with-kvm-and-wayland/
on “Flatpak – a security nightmare – 2 years later (2020)”Submitted Isolating Xwayland in a VM as a story · 111 points
HN discussionthere is such a list for Go here https://github.com/golang/go/wiki/FromXToGo The best article of this kind that i have seen is by far http://roscidus.com/blog/blog/2014/06/06/python-to-ocaml-ret...
Comment linking /blog/blog/2014/06/06/python-to-ocaml-retrospective/
on “A Year in Clojure”Submitted A Unikernel Firewall for QubesOS as a story · 111 points
HN discussionI wrote a few case studies here: https://www.hillelwayne.com/post/business-case-formal-method... . They're case studies that are targeted towards bosses, so focus on how it saves time and money. A couple more I know of: * https://andy.hammerhartes.de/finding-bugs-in-systems-through... * http://roscidus.com/blog/blog/2019/01/01/using-tla-plus-to-u... * https://www.youtube.com/watch?v=oMSmkRGzQ64
Comment linking /blog/blog/2019/01/01/using-tla-plus-to-understand-xen-vchan/
on “Learn TLA+ (2018)”Submitted Linux mode setting, from the comfort of OCaml as a story · 84 points
HN discussionConstructive criticism is nothing to shy away from or be defensive about. Having criticism for something doesn't mean I think it's spam or off topic. Again, for an example of a language X-to-language-Y rewrite story with some substance, that did a lot to boost the image of the language in many peoples eyes, see: http://roscidus.com/blog/blog/2014/06/06/python-to-ocaml-ret... I'd love to something like that the next…
Comment linking /blog/blog/2014/06/06/python-to-ocaml-retrospective/
on “The Piston image library is now pure Rust”Submitted Securing the Unikernel as a story · 84 points
HN discussionGo is not a good example of a type system - its types are limited and restrictive and really will stop you writing some good code that you wanted to write in Python. If you want a Pythonic language with static types, maybe take a look at OCaml (or my personal favourite, Scala - though that language suffers from a bunch of warts for the sake of JVM compatibility). http://roscidus.com/blog/blog/2014/06/06/python-to-oc…
Comment linking /blog/blog/2014/06/06/python-to-ocaml-retrospective/
on “Myths of Enterprise Python”Submitted Visualising an Asynchronous Monad as a story · 80 points
HN discussionFirejail with spawning nested Xorg works fine for me, including text-only copypaste between "host" and "guest" and automatic file synchronization through bind-like mounts. For some firejails I also use Linux network namespaces to control traffic going through taps. My introduction to this approach was the alternative Gentoo handbook by Sakaki[1], but the principles would apply on any distro. There's also a very inte…
Comment linking /blog/blog/2021/10/30/xwayland/
on “FreeBSD Jails for Fun and Profit (2020)”Submitted OCaml: The Bugs So Far as a story · 76 points
HN discussionIt depends on which lightweight OS and which unikernel. But e.g. a stripped down Linux will still have a huge amount of C. If you're going to write your kernel in something safer, then you might as well make a unikernel, rather than creating a kernel/userspace split. It's hard to see how you'd get a traditional OS stripped down anywhere close to e.g. the mirage-firewall unikernel ( http://roscidus.com/blog/blog/2016…
Comment linking /blog/blog/2016/01/01/a-unikernel-firewall-for-qubesos/
on “Docker Acquires Unikernel Systems as It Looks Beyond Containers”Submitted Optimising the Unikernel as a story · 69 points
HN discussionOff-hand, Mirage OS comes to mind - it completely upends how you would "build" and "run" back-end services, and it is written solely in a GC'ed language - OCaml. And all GC'ed languages are not equal; see https://roscidus.com/blog about a Linux package manager ported from Python to OCaml for performance reasons (followed by an OCaml reimplementation of a component in a virtualized OS). Some infrastructure, e.g. data…
Comment linking /blog
on “Four Years of Rust”Submitted CueKeeper: Gitting Things Done in the Browser as a story · 44 points
HN discussion