[HN Gopher] OCaml Onboarding: Introduction to the Dune build system
___________________________________________________________________
OCaml Onboarding: Introduction to the Dune build system
Author : andrewstetsenko
Score : 146 points
Date : 2026-06-04 17:52 UTC (4 days ago)
(HTM) web link (ocamlpro.com)
(TXT) w3m dump (ocamlpro.com)
| ihumanable wrote:
| I like OCaml, I spend most of my day to day though in Elixir and
| I think one of the things that's so nice about elixir is mix.
|
| There's a handful of mix commands you learn when you get started
| and it's such a great experience. You can crack open erlang
| application structure and learn more if you want, but if you just
| want to `mix compile` `mix deps.get` `mix test` that's also fine.
|
| When I first learned ocaml I watched this really wonderful series
| https://www.youtube.com/watch?v=MUcka_SvhLw&list=PLre5AT9JnK...
| (highly recommend if you are at all interested) and it's great
| for learning the language and tooling but it's all opam up until
| the end when some of it switches to dune.
|
| I think wanting to provide more details about what's going on is
| nice too, but I think there's a place for "here's the commands
| you will actually need in your day to day"
| calvinmorrison wrote:
| what is wrong with make why does every language need to re invent
| packaging, building, etc. I think these people have no useful
| software to write so they rewrite the development stack.
| troupo wrote:
| Because Make sucks? Because it's really limited and not
| expressive? Because it's not really a build system (nor is it a
| package manager or a dependency resolver or...)
| klibertp wrote:
| > Because it's really limited and not expressive?
|
| It's neither of those unless you limit yourself to a lowest-
| common-denominator feature set. GNU Make, for example, is a
| Turing-complete, dynamic programming language and a CLI task
| runner. You can build a build system in GNU Make
| (https://github.com/omercsp/simple-build-system) just like
| you can do so in any other language.
|
| Make suffers from unfamiliar and somewhat unorthodox syntax,
| and inconsistent language design. So it's not a _good_
| language, and saying it "sucks" is not completely
| unjustified, but not because it's limited. Looking at SBS, it
| also seems quite expressive, although I can't say I ever
| tried building something in it myself.
| yawaramin wrote:
| The OCaml ecosystem tried the Make route, it was complex,
| turns out no one likes maintaining makefiles by hand, and
| they like opaque make rules even less. Like it or not, dune
| exists for a very good reason.
| rwmj wrote:
| Make works fine with OCaml. There's a handful of rules
| you copy and paste around which is not ideal, but that's
| much easier to deal with than dune.
| zelphirkalt wrote:
| Can you link a Makefile for an OCaml project, which
| ensures reproducibility and locality? What I mean is
| checking checksums of dependencies upon when they are
| installed, and acting only in the project directory, not
| changing the surrounding system in order to run the
| program. Asking, because I tried and failed.
| yawaramin wrote:
| I'd rather not have to maintain lists of source files to
| compile by hand; dune eliminates this drudge work.
| troupo wrote:
| > Make suffers from unfamiliar and somewhat unorthodox
| syntax, and inconsistent language design
|
| You just answered the question "why does every language
| need to re invent packaging, building, etc." Because people
| don't want to build build systems in Make
| pjmlp wrote:
| Because there isn't one package system that works everywhere,
| and even inside a single OS, each group reinvents the packing
| as well.
| Levitating wrote:
| What are you proposing? Because make isn't really good for
| anything either.
| zelphirkalt wrote:
| I use GNU Make for my Python and GNU Guile projects just
| fine. For Python projects it becomes a job runner of tooling
| commands. For Guile projects it uses a SHELL that is a guix
| shell, which references channels and manifest, to ensure
| reproducibility.
| ux266478 wrote:
| Why is an opinionated build system for a language not useful
| software?
| cassepipe wrote:
| When I started learning make it wouldn't work and I wouldn't
| understand why so I dug into it and now I understand how it
| works and I can make it work but seasonned programmers still
| tell me my makefiles are wrong and then proceed to use even
| more arcade parts that render their makefiles incomprehensible.
| At some point I just gave up makefiles for anything non-trivial
| and went over to xmake where life is mostly simple and I never
| do it wrong.
| waynesonfire wrote:
| one day we'll get the equivelent of language server for build
| systems.
| zelphirkalt wrote:
| I tried to write some Ocaml stuff using a Makefile, because I
| also didn't want to use even more specific tooling, but it
| became ugly quickly, because I had to use `ocamlfind` and
| `ocamlc`, and provide a list of all packages to include and so
| on. It felt a bit like writing C at that moment, where you need
| to tell gcc what system libraries you are using, so that it
| compiles the program with those.
|
| So in the end I tried using dune and opam and whatnot, but it
| all felt less than clear to me. Especially, the comment someone
| else made here about having 2 different types of files for dune
| to work ...
|
| I just want a project local directory, that contains all my
| dependencies and a lock file to reproducibly built my projects.
| That's the minimum I expect these days. Or some equivalent
| alternative.
| p4bl0 wrote:
| This is a good introduction to Dune, but frankly, Dune kinda
| sucks. I mean, it is very powerful, and works very well, but it's
| too much of a hassle, especially for beginners. I don't want a
| language specific build system to require _two_ different files
| to actually be usable, even on very simple projects... I still
| use it because it is the de facto standard, but I really
| preferred ocamlbuild [1], which was actually a tool that _just
| worked_ without any configuration necessary for simple projects
| that uses standard tools. Where you would need to write a
| Makefile and call make, you could just write nothing and call
| ocamlbuild and it would just work. Dune lost that ability
| entirely.
|
| [1]
| https://github.com/ocaml/ocamlbuild/blob/master/manual/manua...
| dharmatech wrote:
| I've been messing around with ocaml on plan9:
|
| https://github.com/dharmatech/ocaml
| ranie93 wrote:
| is uv to python what dune is to OCaml?
| natrys wrote:
| No I think uv is to python what opam is to ocaml, it's mostly a
| package/dependency manager.
|
| Superficially, both uv and dune are also project runners. But
| dune is mainly a build tool, most important things dune does
| such as pre-processing, linking, compiling etc., are not needed
| in python in the first place (at least talking about pure
| python). You _can_ use uv to create tarball /wheel but it's
| more akin to simple bundling than building in the dune sense.
| Dune can also run tests, but in uv you would need to delegate
| to something like pytest etc.
| redrobein wrote:
| Does anyone know what's up with ocaml on windows? I haven't used
| it in a while. Trying to install utop on 5.x compiler and quite a
| few packages need a downgrade to 4.x? I've tried with both mingw
| and system-msvc. Same behavior.
___________________________________________________________________
(page generated 2026-06-09 04:01 UTC)