[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)