Skip to content
Release v5.0.0
==============

Highlight
---------

PRoot used to rely on the ELF loader embedded in the ELF interpreter
from the GNU libc.  Sadly this latter suffers from many issues:

* programs that use constructors or destructors might crash: a typical
  example is C++ programs.

* programs that rely on the "rpath" mechanism and that are invoked
  through a symlink might not start: a typical example is the JVM on
  Debian.

* programs that read processes command-line migth be confused because
  initial argv[0] is replaced: typical examples are ps and top.

Moreover not all ELF interpreters provide this feature.  For instance,
ELF interpreters shipped with Bionic (Android) and some versions of
the uClibC can't be used as ELF loaders.  As a consequence it was not
possible to proot into a rootfs that uses such C library.

Now PRoot has its own loader, that means all the limitations above
doesn't exist anymore.

Fixes
-----

* Most bugs related to shebang support -- ie. "#!" at the beginning of
  a program -- were fixed.

Command-line interface changes
------------------------------

* PRoot now starts a login shell when no command is specified; this
  makes the shell read profile files from the guest rootfs, as
  expected by some guest programs.  To get the old behavior, launch
  "/bin/sh" explicitly:

      proot -r whatever /bin/sh

* The -R option now binds "/run" and "/var/run/dbus/system_bus_socket"
  too.  This is useful for guest programs that need to communicate
  with host services.

Validation
----------

====================  =================  ==============  =================  =========
testsuite                   host distro    guest distro     configurations   comments
====================  =================  ==============  =================  =========
proot-v4.0                 OBS */x86_64            none                N/A          a
proot-v4.0                    OBS */x86            none                N/A          b
proot-v4.0              STLinux-2.4/arm            none                N/A          c

proot-v4.0            Slack-14.1/x86_64            none                N/A          a
proot-v4.0/memcheck   Slack-14.1/x86_64            none                N/A          a
proot-v4.0/asan       Slack-14.1/x86_64            none                N/A          a
proot-v4.0/talleak    Slack-14.1/x86_64            none                N/A          a

libuv-0.10.27         Slack-14.1/x86_64    same as host               none          a
libuv-0.10.27         Slack-14.1/x86_64    same as host   kompat, fake_id0          h
libuv-0.10.27         Slack-14.1/x86_64  Slack-14.0/x86               none          a
libuv-0.10.27         Slack-14.1/x86_64  Slack-14.0/x86   kompat, fake_id0          h

ltp-syscall-20130904  Slack-14.1/x86_64    same as host               none          d
ltp-syscall-20130904  Slack-14.1/x86_64    same as host   kompat, fake_id0          i
ltp-syscall-20130904  Slack-14.1/x86_64  Slack-14.0/x86               none          q
ltp-syscall-20130904  Slack-14.1/x86_64  Slack-14.0/x86   kompat, fake_id0          i

ltp-opt-20130904      Slack-14.1/x86_64    same as host               none          g
ltp-opt-20130904      Slack-14.1/x86_64    same as host   kompat, fake_id0       k, g
ltp-opt-20130904      Slack-14.1/x86_64  Slack-14.0/x86               none          r
ltp-opt-20130904      Slack-14.1/x86_64  Slack-14.0/x86   kompat, fake_id0    u, r, g

perl-5.18.1           Slack-14.1/x86_64    same as host               none          a
perl-5.18.1           Slack-14.1/x86_64    same as host   kompat, fake_id0          j
perl-5.18.1           Slack-14.1/x86_64  Slack-14.0/x86               none          a
perl-5.18.1           Slack-14.1/x86_64  Slack-14.0/x86   kompat, fake_id0          j

gdb-7.6.1             Slack-14.1/x86_64    same as host               none          f
gdb-7.6.1             Slack-14.1/x86_64    same as host   kompat, fake_id0          l
gdb-7.6.1             Slack-14.1/x86_64  Slack-14.0/x86               none          c
gdb-7.6.1             Slack-14.1/x86_64  Slack-14.0/x86   kompat, fake_id0          c

coreutils-8.21*       Slack-14.1/x86_64    same as host               none          e
coreutils-8.21*       Slack-14.1/x86_64    same as host   kompat, fake_id0       m, s
coreutils-8.21*       Slack-14.1/x86_64  Slack-14.0/x86               none          p
coreutils-8.21*       Slack-14.1/x86_64  Slack-14.0/x86   kompat, fake_id0          s

proot-v3.2.2          Slack-14.1/x86_64    same as host               none          a
proot-v3.2.2          Slack-14.1/x86_64    same as host           fake_id0          a
proot-v3.2.2          Slack-14.1/x86_64  Slack-14.0/x86               none          c
proot-v3.2.2          Slack-14.1/x86_64  Slack-14.0/x86           fake_id0          c

perl-5.16.1           Slack-14.1/x86_64  Slack-14.1/ARM         qemu-2.1.2          o
coreutils-8.19        Slack-14.1/x86_64  Slack-14.1/ARM         qemu-2.1.2          n

performance           Slack-14.1/x86_64            none               none          t
Coverity Scan         Travis-CI                     N/A                N/A          a
Clang 3.3             Slack-14.1/x86_64             N/A                N/A          a
====================  =================  ==============  =================  =========

a: is OK or nothing special to report.

b: fails on some AMD CPUs.  No explanations yet.

c: ptrace emulation doesn't work.

d: failures = brk01, creat07, execve04, mremap03, msync03, pwrite03,
              pwrite03_64, rmdir02

e: failures = rm/deep-2 misc/cut-huge-to-eol-range misc/csplit-heap
              du/long-from-unreadable install/basic-1 mkdir/p-3

f: failures = break-interp, foll-exec, info-os, pie-execl*, restore*,
              store*, valgrind-db-attach*

g: failures = timer_getoverrun_2-3

h: failures = signal_multiple_loops, fs_chown

i: too many failures to be listed here.  These failures are mostly
   related to the fake_id0 extensions but are not unexpected.

j: failures = Path.t, 110_icmp_inst.t, 500_ping_icmp.t, 520_icmp_ttl.t

k: failures = fork_1-1, sem_unlink_3-1, timer_getoverrun_2-2

l: failures = attach-pie-noexec, break-interp, fileio, foll-exec,
              info-os, longjmp, morestack

m: failures = misc/cut-huge-to-eol-range, misc/csplit-heap,
              ls/no-cap, ls/stat-free-color,
              ls/stat-free-symlinks, mv/atomic2,

              misc/id-setgid, misc/xattr, du/long-from-unreadable,
              ls/file-type, chown/basic, cp/preserve-gid,
              cp/special-bits, install/install-C-root, ls/capability,
              ls/nameless-uid, misc/chroot-credentials,
              mv/sticky-to-xpart, rm/fail-2eperm, rm/no-give-up

n: failures = rm/deep-2, misc/env, misc/printenv, split/fail,
              misc/stty*, dd/skip-seek, dd/skip-seek-past-file,
              du/long-from-unreadable, install/basic-1, mkdir/p-3

o: failures = op/magic.t

p: failures = rm/deep-2, du/long-from-unreadable, install/basic-1,
              mkdir/p-3

q: failures = bdflush01, creat07, execve04, modify_ldt01, mremap03,
              msync03, pwrite03, pwrite03_64, rmdir02, socketcall01

r: failures = mmap_31-1

s: failures = misc/id-setgid, misc/xattr, du/long-from-unreadable,
              ls/file-type, chown/basic, cp/preserve-gid,
              cp/special-bits, install/install-C-root, ls/capability,
              ls/nameless-uid, misc/chroot-credentials,
              mv/sticky-to-xpart, rm/fail-2eperm, rm/no-give-up

t: the loader has introduced a small overhead < 2%

u: failures = fork_1-1 sem_unlink_3-1 timer_getoverrun_2-3

* new