Please visit our migration guide for details.
This is a list of design documents for Native Client. This list generally covers designs that were implemented. It does not cover PPAPI (Pepper).
Dynamic loading and linking:
- Dynamic loading: Options for supporting dynamic loading, and how they interact with dynamic libraries (2010)
Handling faults (hardware exceptions) in untrusted code:
Sandbox security on Windows:
Debugging using GDB:
- Providing a GDB debug stub integrated into native_client (2012). This was the main design doc for NaCl’s GDB debug stub.
- Native Client Support for Debugging, Crash Reporting and Hardware Exception Handling – high level design (Jan 2012)
- NaCl: three kinds of crash handling (2012). This is an earlier document. It contains notes on trusted vs. untrusted crash handling, vs. GDB support.
- Stability of the PNaCl bitcode ABI (2013). This is an overview of ABI stability issues and the features of LLVM IR that PNaCl is removing.
- Incrementally simplifying the PNaCl bitcode format (2013)
- SJLJ EH: C++ exception handling in PNaCl using setjmp()+longjmp() (2013)
- Hiding PNaCl’s x86-64 sandbox base address (2013). This was part of the security hardening we did for enabling PNaCl on the open web.
- Semi-automated NaCl DEPS rolls: Updates to nacl_revision field in Chromium’s DEPS file (2013). This is a description of current practice rather than a design doc.
Obsolete (not implemented)
PNaCl multi-threading support: The following proposals do not reflect what was implemented in PNaCl in the end. They are listed here for historical reference.
- Multi-threading support for a first release of PNaCl (2013): Proposal for mutex_v2/cond_v2 IRT interfaces.
- Explicit vs. implicit atomicity guarantees in PNaCl (2013): Discussion about how to handle atomic memory operations.