Re: Portability of applications written in OCAML

From: Gerd Stolpmann (Gerd.Stolpmann@darmstadt.netsurf.de)
Date: Wed Feb 16 2000 - 23:49:22 MET

  • Next message: Gerd Stolpmann: "Again: Portability of applications"

    On Tue, 15 Feb 2000, Claude Marche wrote:

    >One idea could be distributing bytecode: is it true the any bytecode
    >can be executed on any architecture and OS as soon as the right
    >ocamlrun is used? (Even under non unix OSs like Microsoft-Windows or
    >Mac-OS?)

    As far as I know: Yes. I did it already, and it worked even for systems
    with different endianess. But I did it only for Unixes.

    >If yes, anyone interested in using the application would
    >need only to install the suitable ocamlrun for its architecture/OS
    >combination. It would allow any potentially interested user to try
    >the application, and in case he finds it suitable for its need, he
    >would be motivated to install ocaml for compiling from the sources and
    >getting a faster application.
    >
    >For this to work, a kind of archive of various versions of ocamlrun
    >should exist somewhere on the web, allowing to choose the right
    >architecture/OS, also the right ocaml version, the right libraries
    >like libc 5 or 6 or glibc.

    Good idea.

    >Nevertheless, there is a problem for applications that use other
    >libraries like unix, str, nums, threads, that need to be compiled in
    >-custom mode. If I understand well, binaries compiled with -custom
    >contain the native code of the interpreter itself, so are not portable
    >anymore. Techically speaking, is it possible to build an ocamlrun
    >interpreter that contains those libraries statically linked?

    This is possible by using the -make-runtime option.

    But: This is not the best solution, as the number of libraries is growing,
    and every time a new library (even a new version) would be needed by an
    application, also new bytecode interpreters for all platforms would be
    necessary. With two consequences:

    1) The interpreters become very large, and there will be certainly people
       saying that OCaml is a big fat all-memory-eating language

    2) The interpreters for platforms which are not everybody's darling will
       rapidly become too old to execute many applications.

    My suggestion: Every modern operating system can link libraries dynamically.
    This is also possible for the parts of the OCaml libraries written in C
    which need to be available in the runtime system. The runtime system consists
    of three parts:

    1) The bytecode interpreter
    2) The additional C-libraries
    3) A startup routine which initializes the interpreter and configures the
       additional primitives available by 2)

    There are no problems with parts 1 and 2 and dynamic libraries. Unfortunately,
    part 3 is a generated C function, i.e. a different version is needed for every
    combination of C-libraries. If we want dynamic libraries part 3 must be
    replaced by a configurable dynamic loader. This is not too difficult, I think
    I can write one (at least for Unix); the task of the dynamic loader is
    reading the list of necessary primitives from the bytecode file, loading the
    associated libraries, and setting up the table that maps the primitives to
    object-code symbols.

    If this is done, we can link part 1 and the new loader that replaces part 3 to
    the new, generic main executable which is able to run EVERY application for
    which the necessary dynamic libraries are available.

    So:

    - For every platform, we need only one generic bytecode interpreter and one
      set of shared libraries

    - Only libraries needed for the application are loaded into memory; the memory
      footprints become much smaller

    - If new libraries are available, it is possible to compile them independently
      of the other libraries

    - Multiple versions of the same library can easily be supported.

    - It is often not necessary to recompile the libraries if a new version
      of the OCaml interpreter is available (at least if symbol-level
      compatibility is given; the C FFI did not change often in the past).

    >If this is technically feasible, I would like to know people who are
    >interested in using this for distribution of their own application in
    >bytecode form. Moreover, for building this archive of ocamlrun
    >binaries, many people are needed to cover a wide range of
    >architecture/OS combinations. I have access myself to PCs under Linux
    >(Redhat distribution) and SPARC/Solaris 2.7, that's all.

    Interested. I have some Web applications, and some TK applications.

    I can offer
     - Linux with libc5
     - Linux with glibc6.0
     - Linux with glibc6.1
       (Yes, I had problems to run OCaml applications compiled for glibc6.0 under
        glibc6.1!)
     - FreeBSD 3.3
     - Solaris 2.6
     - AIX 4.2

    Gerd

    -- 
    ----------------------------------------------------------------------------
    Gerd Stolpmann      Telefon: +49 6151 997705 (privat)
    Viktoriastr. 100             
    64293 Darmstadt     EMail:   Gerd.Stolpmann@darmstadt.netsurf.de (privat)
    Germany                     
    ----------------------------------------------------------------------------
    



    This archive was generated by hypermail 2b29 : Fri Feb 18 2000 - 00:41:19 MET