Skip to content
Release v3.2
============

This release was mostly driven by the requirements of "CARE", a new
project based on PRoot that will be released publicly soon on
http://reproducible.io.  For information, "CARE" is the short for
"Comprehensive Archiver for Reproducible Execution".

Highlights
----------

+ Many bugs exposed by a couple of static code analyzers (Coverity,
  Clang, ...) and some test-suites (Linux Test Project, libuv, ...)
  are now fixed.

+ The "kompat" extension ("-k" option) can now emulate most of the
  kernel features that would be required by the guest system but that
  are not available on the host kernel.  For example, it can now make
  programs from Ubuntu 13.04 64-bit run on RedHat 5 64-bit without any
  further tweaks:

     rh5-64$ proot -k 3.8 -R ubuntu-13.04-64bit/ ...

+ On ARM and x86_64, the heap segment is now emulated with a regular
  memory mapping to ensure this former always exists.  This was
  required because some kernels might put a non-fixed memory mapping
  right after the regular heap when using some GNU ELF interpreters
  (ld.so) as loaders.  Without the heap segment emulation, some
  programs like Bash would crash because the heap can't grow anymore:

      bash: xmalloc: locale.c:73: cannot allocate 2 bytes (0 bytes allocated)

Miscellaneous
-------------

+ When using the "-R" option, the path to the guest rootfs is now
  bound into the guest rootfs itself.  This is required to run
  programs that search for their DSOs in /proc/self/maps, like VLC for
  instance.

+ When using the "-v" option with a level greater than 2, syscalls are
  now printed as strings instead of numbers, à la strace:

    $ proot -v 3 true
    [...]
    proot info: pid 29847: sysenter start: mmap(0x0, 0x2d141, 0x1, 0x2, 0x3, 0x0) [...]
    [...]

+ The article about the migration from ScratchBox2 is now publicly
  available:

    https://github.com/cedric-vincent/PRoot/blob/v3.2/doc/articles/howto_migrate_from_scratchbox2.txt

Internal changes
----------------

+ Tools based on PRoot (CARE, DepsTracker, ATOS, ...) can now easily
  replace the original command-line interface with their own
  command-line interface.

+ It is now possible to chain forged syscalls to a regular syscall.
  Search for "register_chained_syscall" in the sources for details.

+ A couple of new helpers are now visible from the extensions.

Thanks
------

+ Bug reports and tests: Corbin Champion, Maxence Dalmais, and Nicolas
  Cornu.

+ Static code analysis: Antoine Moynault and Christophe Guillon.

+ Patches: Rémi Duraffort.

+ Unexpected hint: Christophe Monat :)

Validation
----------

====================  =================  ==============  =================  =========
testsuite                   host distro    guest distro           features   comments
====================  =================  ==============  =================  =========
proot-v3.2                 OBS */x86_64            none                N/A          a
proot-v3.2                    OBS */x86            none                N/A          a
proot-v3.2             Ubuntu-10.10/arm            none               none          a

proot-v3.2            Slack-14.0/x86_64            none               none          a
proot-v3.2            Slack-14.1/x86_64            none            seccomp          a

proot-v3.2/memcheck   Slack-14.1/x86_64            none               none          a
proot-v3.2/memcheck   Slack-14.1/x86_64            none            seccomp          a

proot-v3.2/asan       Slack-14.1/x86_64            none               none          a
proot-v3.2/asan       Slack-14.1/x86_64            none            seccomp          a

proot-v3.2/talleak    Slack-14.0/x86_64            none               none          a
proot-v3.2/talleak    Slack-14.1/x86_64            none            seccomp          a

libuv-0.10.18         Slack-14.0/x86_64    same as host               none          b
libuv-0.10.18         Slack-14.0/x86_64    same as host             kompat       b, c
libuv-0.10.18         Slack-14.1/x86_64    same as host            seccomp          a
libuv-0.10.18         Slack-14.1/x86_64    same as host     seccomp/kompat          b

libuv-0.10.18         Slack-14.0/x86_64  Slack-14.0/x86               none          b
libuv-0.10.18         Slack-14.0/x86_64  Slack-14.0/x86             kompat       b, c
libuv-0.10.18         Slack-14.1/x86_64  Slack-14.0/x86            seccomp          a
libuv-0.10.18         Slack-14.1/x86_64  Slack-14.0/x86     seccomp/kompat          b

ltp-syscall-20130904  Slack-14.0/x86_64    same as host               none          d
ltp-syscall-20130904  Slack-14.0/x86_64    same as host             kompat       d, e
ltp-syscall-20130904  Slack-14.1/x86_64    same as host            seccomp          d
ltp-syscall-20130904  Slack-14.1/x86_64    same as host     seccomp/kompat          e

ltp-syscall-20130904  Slack-14.0/x86_64  Slack-14.0/x86               none       d, f
ltp-syscall-20130904  Slack-14.0/x86_64  Slack-14.0/x86             kompat    d, e ,f
ltp-syscall-20130904  Slack-14.1/x86_64  Slack-14.0/x86            seccomp       d, f
ltp-syscall-20130904  Slack-14.1/x86_64  Slack-14.0/x86     seccomp/kompat    d, e, f

perl-5.18.1           Slack-14.0/x86_64    same as host               none          h
perl-5.18.1           Slack-14.0/x86_64    same as host             kompat       h, i
perl-5.18.1           Slack-14.1/x86_64    same as host            seccomp          h
perl-5.18.1           Slack-14.1/x86_64    same as host     seccomp/kompat          h

perl-5.18.1           Slack-14.0/x86_64  Slack-14.0/x86               none          h
perl-5.18.1           Slack-14.0/x86_64  Slack-14.0/x86             kompat       h, i
perl-5.18.1           Slack-14.1/x86_64  Slack-14.0/x86            seccomp          h
perl-5.18.1           Slack-14.1/x86_64  Slack-14.0/x86     seccomp/kompat          h

posixtestsuite-1.5.2  Slack-14.0/x86_64    same as host               none          a
posixtestsuite-1.5.2  Slack-14.0/x86_64    same as host             kompat          a
posixtestsuite-1.5.2  Slack-14.1/x86_64    same as host            seccomp          a
posixtestsuite-1.5.2  Slack-14.1/x86_64    same as host     seccomp/kompat          a

posixtestsuite-1.5.2  Slack-14.0/x86_64  Slack-14.0/x86               none          j
posixtestsuite-1.5.2  Slack-14.0/x86_64  Slack-14.0/x86             kompat          j
posixtestsuite-1.5.2  Slack-14.1/x86_64  Slack-14.0/x86            seccomp          j
posixtestsuite-1.5.2  Slack-14.1/x86_64  Slack-14.0/x86     seccomp/kompat          j

perl-5.16.1           Slack-14.0/x86_64  Slack-14.0/ARM         qemu-1.6.1          h
coreutils-8.19        Slack-14.0/x86_64  Slack-14.0/ARM         qemu-1.6.1          k

performance           Slack-14.0/x86_64            none               none          l
====================  =================  ==============  =================  =========

Comments
--------

a: everything is OK

b: failures:

   - "signal_multiple_loops" (ptrace slowdown -> timeout)

c: failures:

   - "threadpool_cancel_getaddrinfo" (need investigation)

d: failures:

   - "creat07", "execve04" (due to the usage of a loader in PRoot)

   - "ptrace01", "ptrace02", "ptrace03", "ptrace05" (no ptrace
     emulation in PRoot)

   - "rmdir02" (reach the PATH_MAX limit in PRoot)

   - "mremap03", "msync05", "pwrite03", "pwrite03_64" (due to heap
     emulation in PRoot)

   - "msgctl10", "msgctl11", (ptrace slowdown -> timeout)

e: failures:

   - "eventfd2_03", "pselect01", "pselect01_64" (known limitation of
     the "kompat" extension in PRoot)

f: failures:

   - "modify_ldt01" (need investigation)

h: failures:

   - "cpan/File-Path/t/Path.t",
     "dist/ExtUtils-Command/t/eu_command.t", "op/magic.t" (known
     failures due to PRoot)

i: failures:

   - parallel build is broken (need investigation)

j: failures:

   - "pthread_attr_setdetachstate", "pthread_attr_getdetachstate",
     "pthread_attr_init" (need investigation)

k: failures:

   - "misc/ls-misc", "misc/printenv", "split/fail",
     "df/total-unprocessed", "dd/skip-seek", "dd/skip-seek-past-file"
     (due to QEMU user-mode)

   - "install/basic-1", "mkdir/p-3", "readlink/can-e",
     "readlink/can-f", "readlink/can-m" (known failures due to PRoot)

l: performance regression introduced by commit 7863f562