Plasma GitLab Archive
Projects Blog Knowledge

GODI Project:
Mailing List 
Why Ocaml? 
GODI is discontinued. This is the archived content of the former site


What is GODI?

  • What does it mean that GODI is a distribution of Ocaml? - Ocaml is an open source software by the French research institute INRIA. As such it is quite "naked" - only a few libaries beyond the standard library are included. GODI brings Ocaml into a new shape - we redistribute Ocaml, and also deliver a large number of add-on libraries and utilities. This is very much the same as for Linux - the kernel is not much worth alone, and so-called Linux distributions make a whole operating system out of it by adding more software.
  • I've heard GODI bases on the NetBSD's port system. Is this true? - In deed, early versions of GODI just used NetBSD's version of the BSD port system. However, since the early times more or less everything has been rewritten. Most parts of the packaging system are now written in Ocaml, not C, but you can see the heritage when you look at the overall design, and at shell script codes.
  • Whose work is GODI? - GODI has been initiated by Gerd Stolpmann. The "G" in the name means both "Gerd" and "General" at the same time. "ODI" means O'Caml distribution. Gerd still does a lot of GODI development. The packages are, however, often maintained by other people.
  • Is GODI only a private hobby, or is it more serious? - It is for sure a serious project. It is actually not the private person Gerd Stolpmann who is backing this project, but his company (Informatikbüro Stolpmann). GODI exists since 2004, and the current release is already the sixth version. GODI is used by several companies as their Ocaml platform. Many package maintainers use Ocaml for their profession. In the future, GODI might even get a commercial branch to get into more direct interactions with professional users.
  • Which software can be built and managed by GODI? - Currently, GODI supports:
    • The Ocaml distribution (compilers, runtime system, tools and libraries as distributed)

    • A lot of libraries for O'Caml. See packages.html for a list.

    • Some C libraries when the packagers found it useful to include them

    • A small number of applications

  • How "official" is GODI? - There is no agreement between the GODI project and the Ocaml developers about GODI, it has begun as Gerd's private "recompilation automation" project, and GODI is now seeking support from Ocaml developers and users. There was a lot of positive feedback, e.g. here you can read a positive statement by Xavier Leroy: "There remains a problem of how to make it easy for everyone to install and use these third-party contributions. CPAN managed to do it through standardization on naming conventions, configuration and installation procedures, and a *lot* of discipline from the contributors. We aren't quite at this point with OCaml, although Gerd Stolpmann's GODI is an impressive first step in this direction. Again, it's up to this community to tell whether this is a good approach that should be pursued, e.g. by providing GODI packaging from your own libraries. One cannot just wish there would be a CPAN for OCaml and just wait for us INRIA folks to come up with it overnight." (Full message)
  • What about other Ocaml distributions? - GODI is unique insofar it is the only OS-independent distribution of Ocaml. There are also good distributions from Debian and Fedora that cover a lot of good software. But these are specific to their respective operating systems.
  • What about other Ocaml package sources? - There is OASIS, which tries to package add-on software for all Ocaml distributions. There is work underway to integrate GODI and OASIS so that OASIS packages can be easily installed in GODI.

About the terms and conditions

  • Under which licensing conditions is GODI distributed? - The GODI system software comes with a very liberal license.
  • Under which licensing conditions are the GODI packages distributed? - Of course, under their original licenses. GODI is just another distribution channel for open source software. We do not have the right to modify these conditions.


  • Nothing happens after I started the bootstrap script and I answered all these questions. What is going on? - Well, this script does not output much. All relevant messages indicating progress are appended to the bootstrap.log file. Look into this file to check what the bootstrap is currently doing. Potential long-running actions include the additional downloads from the Internet. If your connection is bad this can take some time.
  • Which prerequisite software do I need? - You need: gcc and a working C toolchain (including assembler and linker), GNU make, GNU zip, GNU patch, GNU wget. bzip2 is recommended. Check that ncurses is installed (or cursor keys will not work later). Also, you need a standard set of Unix shell utilities, including awk, m4, and dc. If you do not have PCRE, you need to change godi.conf so that GODI's own version of PCRE is installed.
  • How do I change godi.conf? - The file is installed at $PREFIX/etc/godi.conf (where $PREFIX is the GODI root directory). This file needs to be changed between stages 1 and 2 of the bootstrap. You have two options: Either run bootstrap with -no-stage2, edit this file, and then run bootstrap_stage2 manually (w/o switches). Or just wait until bootstrap runs into the error, edit the file, and restart bootstrap again with switch -restart.
  • I am forced to use a web proxy to access the Internet. How to do? - Set the environment variables http_proxy and ftp_proxy as follows, before starting the bootstrap or (later) godi_console:
    export ftp_proxy http_proxy
  • Our company puts all the GNU libraries into directory $d. How do I tell GODI to look there? - Add to godi.conf:
    SEARCH_LIBS += $d
    (where $d is the expanded absolute path name). The locations $d/include and $d/lib are then searched for libraries. If you need also binaries, you need to put $d/bin into PATH, of course.

GODI Design

  • What does it mean when a package is dependent on another package? -

    Currently, GODI knows two kinds of dependencies: strict dependencies, and build dependencies. A dependency enforces that another package is installed when a package is used (strict case), or when it is built.

    This sounds well-known, but note that there are subtle differences to other package managers that focus on software written in the C language. This is better explained by an example: assume there are libraries A and B, and that B depends strictly on A. It is the normal case that the dependencies between libraries are strict, because you cannot use B without A (even though O'Caml libraries are static).

    The first difference is the strict version control. For example, B might demand that the version of A is at least 1.0. For C-language software, this requirement is interpreted both for the build time and for the run time of the library. This means that you can replace version 1.0 by 1.0.1 without any trouble, just install it. For O'Caml, however, this is a very rare case. The smallest change in the interfaces of libraries cause that they become incompatible, and that means that you must rebuild B if you upgrade A from 1.0 to 1.0.1. Because of this, a requirement like A>=1.0 is automatically transformed to A=1.0 (or whatever version is found) for the installed library.

    The next difference is a consequence of the first: If you upgrade a library like A, you must recompile all dependent libraries like B. Because this happens frequently, GODI supports this explictly: If you select a package in godi_console for rebuild, all dependent packages are selected, too, after you have typed 's'.

    Note that only strict dependencies are affected by this rule, not build dependencies.

    The algorithm GODI uses for dependency analysis is quite complex, because it checks dependencies both in the direction of missing or bad requirements, and in the direction of successors that use a package.

  • Why isn't there a GUI for godi_console? -

    There is a very good reason why godi_console is a text application: you don't need working graphics libraries to get GODI running. Furthermore, there are situations where a text application has advantages over a GUI application, e.g. when the network has too little bandwidth or too big latency, or when the target system does not have a working X installation (think of network servers or mobile devices).

    Of course, this only explains why the text version of godi_console has higher priority than the GUI version. The design of godi_console includes the option of a later GUI version, but nobody has yet written the missing Miniui_labl(g)tk module we would need.

  • The text UI of godi_console is fine, but how do I install packages in a script? - godi_console includes support for scripting, just run "godi_console -help" to see all the commands. For example, to install the package godi-xstr just run
    godi_console perform -build godi-xstr
    More information can be found in manual pages, and in the GODI User's Manual.
This web site is published by Informatikbüro Gerd Stolpmann
Powered by Caml