The port is at the stage where it can run simple statically-linked and dynamically-linked executables, from the command line and from the web browser.
This has not involved modifying Python at all, although I have added an extension module to wrap a couple of NaCl-specific system calls (imc_sendmsg() and imc_recvmsg()). The Python build runs to completion, including the parts where it runs the executable it builds. A simple instruction-rewriting trick means that dynamically-linked NaCl executables can run outside of NaCl, directly under Linux, linked against the regular Linux glibc. This means we can avoid some of the problems associated with cross-compilation when building for NaCl.
This work has involved extending Native Client:
- Adding support for dynamic loading of code. Initially I have focused on just making it work. Now I'll focus on ensuring this is secure.
- Making various changes to the NaCl versions of gcc and binutils to support dynamically linked code.
See the web page for instructions on how to get the code and try it out.