diff options
author | jfb <jfb@chromium.org> | 2015-02-12 15:04:27 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-02-12 23:05:42 +0000 |
commit | 04da14966c8d0ba981629b5fa4172f0700221576 (patch) | |
tree | 3d6b9e8a5ef5f35fe9cde08bdd5c5a9835e0493b /native_client_sdk | |
parent | 7915eee67cd3b9d24dfbdadfff492739bb97a414 (diff) | |
download | chromium_src-04da14966c8d0ba981629b5fa4172f0700221576.zip chromium_src-04da14966c8d0ba981629b5fa4172f0700221576.tar.gz chromium_src-04da14966c8d0ba981629b5fa4172f0700221576.tar.bz2 |
NaCl docs: add project ideas
Add a section to our documentation which lists project
ideas that external contributors can work on. This list
should be suitable to beginners as well as more experienced
developers, and is something we can use for the Google
Summer of Code application.
TBR= bradnelson@chromium.org, binji@chromium.org, sbc@chromium.org, jmedley@chromium.org
BUG= none
Review URL: https://codereview.chromium.org/909383002
Cr-Commit-Position: refs/heads/master@{#316073}
Diffstat (limited to 'native_client_sdk')
-rw-r--r-- | native_client_sdk/doc_generated/faq.html | 66 | ||||
-rw-r--r-- | native_client_sdk/doc_generated/reference/ideas.html | 329 | ||||
-rw-r--r-- | native_client_sdk/doc_generated/sitemap.html | 5 | ||||
-rw-r--r-- | native_client_sdk/src/doc/_book.yaml | 2 | ||||
-rw-r--r-- | native_client_sdk/src/doc/faq.rst | 12 | ||||
-rw-r--r-- | native_client_sdk/src/doc/reference/ideas.rst | 361 | ||||
-rw-r--r-- | native_client_sdk/src/doc/sitemap.rst | 1 |
7 files changed, 744 insertions, 32 deletions
diff --git a/native_client_sdk/doc_generated/faq.html b/native_client_sdk/doc_generated/faq.html index e165eee..8b05b15 100644 --- a/native_client_sdk/doc_generated/faq.html +++ b/native_client_sdk/doc_generated/faq.html @@ -23,49 +23,50 @@ <li><p class="first"><a class="reference internal" href="#openness-and-supported-architectures-and-languages" id="id11">Openness, and Supported Architectures and Languages</a></p> <ul class="small-gap"> <li><a class="reference internal" href="#is-native-client-open-is-it-a-standard" id="id12">Is Native Client open? Is it a standard?</a></li> -<li><a class="reference internal" href="#what-are-the-supported-instruction-set-architectures" id="id13">What are the supported instruction set architectures?</a></li> -<li><a class="reference internal" href="#do-i-have-to-use-c-or-c-i-d-really-like-to-use-another-language" id="id14">Do I have to use C or C++? I’d really like to use another language.</a></li> -<li><a class="reference internal" href="#do-you-only-support-chrome-what-about-other-browsers" id="id15">Do you only support Chrome? What about other browsers?</a></li> -<li><a class="reference internal" href="#what-s-the-difference-between-npapi-and-pepper" id="id16">What’s the difference between NPAPI and Pepper?</a></li> -<li><a class="reference internal" href="#is-npapi-part-of-the-native-client-sdk" id="id17">Is NPAPI part of the Native Client SDK?</a></li> -<li><a class="reference internal" href="#does-native-client-support-simd-vector-instructions" id="id18">Does Native Client support SIMD vector instructions?</a></li> -<li><a class="reference internal" href="#can-i-use-native-client-for-3d-graphics" id="id19">Can I use Native Client for 3D graphics?</a></li> -<li><a class="reference internal" href="#does-native-client-support-concurrency-parallelism" id="id20">Does Native Client support concurrency/parallelism?</a></li> +<li><a class="reference internal" href="#how-can-i-contribute-to-native-client" id="id13">How can I contribute to Native Client?</a></li> +<li><a class="reference internal" href="#what-are-the-supported-instruction-set-architectures" id="id14">What are the supported instruction set architectures?</a></li> +<li><a class="reference internal" href="#do-i-have-to-use-c-or-c-i-d-really-like-to-use-another-language" id="id15">Do I have to use C or C++? I’d really like to use another language.</a></li> +<li><a class="reference internal" href="#do-you-only-support-chrome-what-about-other-browsers" id="id16">Do you only support Chrome? What about other browsers?</a></li> +<li><a class="reference internal" href="#what-s-the-difference-between-npapi-and-pepper" id="id17">What’s the difference between NPAPI and Pepper?</a></li> +<li><a class="reference internal" href="#is-npapi-part-of-the-native-client-sdk" id="id18">Is NPAPI part of the Native Client SDK?</a></li> +<li><a class="reference internal" href="#does-native-client-support-simd-vector-instructions" id="id19">Does Native Client support SIMD vector instructions?</a></li> +<li><a class="reference internal" href="#can-i-use-native-client-for-3d-graphics" id="id20">Can I use Native Client for 3D graphics?</a></li> +<li><a class="reference internal" href="#does-native-client-support-concurrency-parallelism" id="id21">Does Native Client support concurrency/parallelism?</a></li> </ul> </li> -<li><p class="first"><a class="reference internal" href="#coming-soon" id="id21">Coming Soon</a></p> +<li><p class="first"><a class="reference internal" href="#coming-soon" id="id22">Coming Soon</a></p> <ul class="small-gap"> -<li><a class="reference internal" href="#do-native-client-modules-have-access-to-external-devices" id="id22">Do Native Client modules have access to external devices?</a></li> +<li><a class="reference internal" href="#do-native-client-modules-have-access-to-external-devices" id="id23">Do Native Client modules have access to external devices?</a></li> </ul> </li> -<li><p class="first"><a class="reference internal" href="#security-and-privacy" id="id23">Security and Privacy</a></p> +<li><p class="first"><a class="reference internal" href="#security-and-privacy" id="id24">Security and Privacy</a></p> <ul class="small-gap"> -<li><a class="reference internal" href="#what-happens-to-my-data-when-i-use-native-client" id="id24">What happens to my data when I use Native Client?</a></li> -<li><a class="reference internal" href="#how-does-native-client-prevent-sandboxed-code-from-doing-bad-things" id="id25">How does Native Client prevent sandboxed code from doing Bad Things?</a></li> -<li><a class="reference internal" href="#how-does-google-know-that-the-safety-measures-in-native-client-are-sufficient" id="id26">How does Google know that the safety measures in Native Client are sufficient?</a></li> +<li><a class="reference internal" href="#what-happens-to-my-data-when-i-use-native-client" id="id25">What happens to my data when I use Native Client?</a></li> +<li><a class="reference internal" href="#how-does-native-client-prevent-sandboxed-code-from-doing-bad-things" id="id26">How does Native Client prevent sandboxed code from doing Bad Things?</a></li> +<li><a class="reference internal" href="#how-does-google-know-that-the-safety-measures-in-native-client-are-sufficient" id="id27">How does Google know that the safety measures in Native Client are sufficient?</a></li> </ul> </li> -<li><p class="first"><a class="reference internal" href="#development" id="id27">Development</a></p> +<li><p class="first"><a class="reference internal" href="#development" id="id28">Development</a></p> <ul class="small-gap"> -<li><a class="reference internal" href="#how-do-i-debug" id="id28">How do I debug?</a></li> -<li><a class="reference internal" href="#how-do-i-build-x86-32-x86-64-or-arm-nexes" id="id29">How do I build x86-32, x86-64 or ARM <code>.nexes</code>?</a></li> -<li><a class="reference internal" href="#how-can-my-web-application-determine-which-nexe-to-load" id="id30">How can my web application determine which <code>.nexe</code> to load?</a></li> -<li><a class="reference internal" href="#is-it-possible-to-build-a-native-client-module-with-just-plain-c-not-c" id="id31">Is it possible to build a Native Client module with just plain C (not C++)?</a></li> -<li><a class="reference internal" href="#what-unix-system-calls-can-i-make-through-native-client" id="id32">What UNIX system calls can I make through Native Client?</a></li> -<li><a class="reference internal" href="#is-my-favorite-third-party-library-available-for-native-client" id="id33">Is my favorite third-party library available for Native Client?</a></li> -<li><a class="reference internal" href="#do-all-the-files-in-an-application-need-to-be-served-from-the-same-domain" id="id34">Do all the files in an application need to be served from the same domain?</a></li> +<li><a class="reference internal" href="#how-do-i-debug" id="id29">How do I debug?</a></li> +<li><a class="reference internal" href="#how-do-i-build-x86-32-x86-64-or-arm-nexes" id="id30">How do I build x86-32, x86-64 or ARM <code>.nexes</code>?</a></li> +<li><a class="reference internal" href="#how-can-my-web-application-determine-which-nexe-to-load" id="id31">How can my web application determine which <code>.nexe</code> to load?</a></li> +<li><a class="reference internal" href="#is-it-possible-to-build-a-native-client-module-with-just-plain-c-not-c" id="id32">Is it possible to build a Native Client module with just plain C (not C++)?</a></li> +<li><a class="reference internal" href="#what-unix-system-calls-can-i-make-through-native-client" id="id33">What UNIX system calls can I make through Native Client?</a></li> +<li><a class="reference internal" href="#is-my-favorite-third-party-library-available-for-native-client" id="id34">Is my favorite third-party library available for Native Client?</a></li> +<li><a class="reference internal" href="#do-all-the-files-in-an-application-need-to-be-served-from-the-same-domain" id="id35">Do all the files in an application need to be served from the same domain?</a></li> </ul> </li> -<li><p class="first"><a class="reference internal" href="#portability" id="id35">Portability</a></p> +<li><p class="first"><a class="reference internal" href="#portability" id="id36">Portability</a></p> <ul class="small-gap"> -<li><a class="reference internal" href="#do-i-have-to-do-anything-special-to-make-my-application-run-on-different-operating-systems" id="id36">Do I have to do anything special to make my application run on different operating systems?</a></li> -<li><a class="reference internal" href="#how-easy-is-it-to-port-my-existing-native-code-to-native-client" id="id37">How easy is it to port my existing native code to Native Client?</a></li> +<li><a class="reference internal" href="#do-i-have-to-do-anything-special-to-make-my-application-run-on-different-operating-systems" id="id37">Do I have to do anything special to make my application run on different operating systems?</a></li> +<li><a class="reference internal" href="#how-easy-is-it-to-port-my-existing-native-code-to-native-client" id="id38">How easy is it to port my existing native code to Native Client?</a></li> </ul> </li> -<li><p class="first"><a class="reference internal" href="#troubleshooting" id="id38">Troubleshooting</a></p> +<li><p class="first"><a class="reference internal" href="#troubleshooting" id="id39">Troubleshooting</a></p> <ul class="small-gap"> -<li><a class="reference internal" href="#my-pexe-isn-t-loading-help" id="id39">My <code>.pexe</code> isn’t loading, help!</a></li> -<li><a class="reference internal" href="#my-nexe-files-never-finish-loading-what-gives" id="id40">My <code>.nexe</code> files never finish loading. What gives?</a></li> +<li><a class="reference internal" href="#my-pexe-isn-t-loading-help" id="id40">My <code>.pexe</code> isn’t loading, help!</a></li> +<li><a class="reference internal" href="#my-nexe-files-never-finish-loading-what-gives" id="id41">My <code>.nexe</code> files never finish loading. What gives?</a></li> </ul> </li> </ul> @@ -220,6 +221,8 @@ to consider Native Client for standardization.</p> <p>We consistenly try to document our design and implementation and hope to standardize Portable Native Client when it gains more traction. A good example is our <a class="reference internal" href="/native-client/reference/pnacl-bitcode-abi.html"><em>PNaCl bitcode reference manual</em></a>.</p> +<h3 id="how-can-i-contribute-to-native-client">How can I contribute to Native Client?</h3> +<p>Read about <a class="reference internal" href="/native-client/reference/ideas.html"><em>contributor ideas</em></a>.</p> <h3 id="what-are-the-supported-instruction-set-architectures">What are the supported instruction set architectures?</h3> <p>Portable Native Client uses an architecture-independent format (the <code>.pexe</code>) which can currently be translated to execute on processors @@ -249,7 +252,8 @@ supported by compiling <a class="reference external" href="https://code.google.c languages such as <a class="reference external" href="http://www.rust-lang.org/">Rust</a>, <a class="reference external" href="https://golang.org">Go</a>, or Objective-C, but there may still be a few rough edges.</p> <p>If you’re interested in getting other languages working, please contact the -Native Client team by way of the <a class="reference external" href="https://groups.google.com/group/native-client-discuss">native-client-discuss</a> mailing list.</p> +Native Client team by way of the <a class="reference external" href="https://groups.google.com/group/native-client-discuss">native-client-discuss</a> mailing list, and read +through <a class="reference internal" href="/native-client/reference/ideas.html"><em>contributor ideas</em></a>.</p> <h3 id="do-you-only-support-chrome-what-about-other-browsers">Do you only support Chrome? What about other browsers?</h3> <p>We aim to support multiple browsers. However, a number of features that we consider requirements for a production-quality system that keeps the @@ -389,7 +393,9 @@ the standard UNIX <code>mmap()</code> system call.</p> <p>Google has ported several third-party libraries to Native Client; such libraries are available in the <a class="reference external" href="https://code.google.com/p/naclports">naclports</a> project. We encourage you to contribute libraries to naclports, and/or to host your own ported libraries, and to let the -team know about it on <a class="reference external" href="https://groups.google.com/group/native-client-discuss">native-client-discuss</a> when you do.</p> +team know about it on <a class="reference external" href="https://groups.google.com/group/native-client-discuss">native-client-discuss</a> when you do. You can also read +through <a class="reference internal" href="/native-client/reference/ideas.html"><em>contributor ideas</em></a> to find ideas of new projects +to port.</p> <h3 id="do-all-the-files-in-an-application-need-to-be-served-from-the-same-domain">Do all the files in an application need to be served from the same domain?</h3> <p>The <code>.nmf</code>, and <code>.nexe</code> or <code>.pexe</code> files must either be served from the same origin as the embedding page or an origin that has been configured diff --git a/native_client_sdk/doc_generated/reference/ideas.html b/native_client_sdk/doc_generated/reference/ideas.html new file mode 100644 index 0000000..863af86 --- /dev/null +++ b/native_client_sdk/doc_generated/reference/ideas.html @@ -0,0 +1,329 @@ +{{+bindTo:partials.standard_nacl_article}} + +<section id="contributor-ideas"> +<span id="ideas"></span><h1 id="contributor-ideas"><span id="ideas"></span>Contributor Ideas</h1> +<div class="contents local" id="contents" style="display: none"> +<ul class="small-gap"> +<li><a class="reference internal" href="#contributing-me" id="id8">Contributing? Me‽</a></li> +<li><p class="first"><a class="reference internal" href="#id1" id="id9">Ideas</a></p> +<ul class="small-gap"> +<li><p class="first"><a class="reference internal" href="#ports" id="id10">Ports</a></p> +<ul class="small-gap"> +<li><a class="reference internal" href="#new-filesystems" id="id11">New Filesystems</a></li> +<li><a class="reference internal" href="#open-source-porting" id="id12">Open Source Porting</a></li> +</ul> +</li> +<li><p class="first"><a class="reference internal" href="#languages" id="id13">Languages</a></p> +<ul class="small-gap"> +<li><a class="reference internal" href="#rust" id="id14">Rust</a></li> +<li><a class="reference internal" href="#haskell" id="id15">Haskell</a></li> +<li><a class="reference internal" href="#julia" id="id16">Julia</a></li> +<li><a class="reference internal" href="#scala" id="id17">Scala</a></li> +<li><a class="reference internal" href="#elm" id="id18">Elm</a></li> +<li><a class="reference internal" href="#mono" id="id19">Mono</a></li> +<li><a class="reference internal" href="#perl" id="id20">Perl</a></li> +</ul> +</li> +<li><a class="reference internal" href="#tcc" id="id21">TCC</a></li> +<li><p class="first"><a class="reference internal" href="#llvm-and-pnacl" id="id22">LLVM and PNaCl</a></p> +<ul class="small-gap"> +<li><a class="reference internal" href="#sandboxing-optimizations" id="id23">Sandboxing Optimizations</a></li> +<li><a class="reference internal" href="#binary-size-reduction" id="id24">Binary Size Reduction</a></li> +<li><a class="reference internal" href="#vector-support" id="id25">Vector Support</a></li> +<li><a class="reference internal" href="#atomics" id="id26">Atomics</a></li> +<li><a class="reference internal" href="#security-enhanced-pnacl" id="id27">Security-enhanced PNaCl</a></li> +</ul> +</li> +<li><p class="first"><a class="reference internal" href="#nacl" id="id28">NaCl</a></p> +<ul class="small-gap"> +<li><a class="reference internal" href="#auto-sandboxing" id="id29">Auto-Sandboxing</a></li> +<li><a class="reference internal" href="#new-sandbox" id="id30">New Sandbox</a></li> +<li><a class="reference internal" href="#bit-sandbox" id="id31">64-bit Sandbox</a></li> +</ul> +</li> +</ul> +</li> +</ul> + +</div><h2 id="contributing-me">Contributing? Me‽</h2> +<p>NaCl and PNaCl are very big projects: they expose an entire operating system to +developers, interact with all of the Web platform, and deal with compilers +extensively to allow code written in essentially any programming language to +execute on a variety of CPU architectures. This can be daunting when trying to +figure out how to contribute to the open-source project! This page tries to make +contributing easier by listing project ideas by broad area of interest, and +detailing the required experience and expectations for each idea.</p> +<p>This isn’t meant to constrain contributions! If you have ideas that aren’t on +this page please contact the <a class="reference external" href="https://groups.google.com/group/native-client-discuss">native-client-discuss</a> mailing list.</p> +<p>If you like an idea on this page and would like to get started, contact the +<a class="reference external" href="https://groups.google.com/group/native-client-discuss">native-client-discuss</a> mailing list so that we can help you find a mentor.</p> +<h2 id="id1">Ideas</h2> +<p>We’ve separated contributor ideas into broad areas of interest:</p> +<ul class="small-gap"> +<li><strong>Ports</strong> encompass all the code that <em>uses</em> the PNaCl platform. Put simply, +the point of ports is to make existing open-source code work.</li> +<li><strong>Programming languages</strong> sometimes involves compiler work, and sometimes +requires getting an interpreter and its APIs to work well within the Web +platform.</li> +<li><strong>LLVM and PNaCl</strong> requires compiler work: PNaCl is based on the LLVM +toolchain, and most of the work in this area would occur in the upstream LLVM +repository.</li> +<li><strong>NaCl</strong> mostly deals with low-level systems work and security.</li> +</ul> +<h3 id="ports">Ports</h3> +<h4 id="new-filesystems">New Filesystems</h4> +<ul class="small-gap"> +<li><strong>Project:</strong> Expose new filesystems to <a class="reference internal" href="/native-client/devguide/coding/nacl_io.html"><em>nacl_io</em></a>.</li> +<li><strong>Brief explanation:</strong> nacl_io exposes filesystems like html5fs and RAM disk, +which can be mounted and then accessed through regular POSIX APIs. New types +of filesystems could be exposed in a similar way, allowing developers to build +apps that “just work” on the Web platform while using Web APIs. A few ideas +include connecting to: Google Drive, Github, Dropbox.</li> +<li><strong>Expected results:</strong> A new filesystem is mountable using nacl_io, is well +tested, and used in a demo application.</li> +<li><strong>Knowledge Prerequisite:</strong> C++.</li> +<li><strong>Mentor:</strong> Sam Clegg.</li> +</ul> +<h4 id="open-source-porting">Open Source Porting</h4> +<ul class="small-gap"> +<li><strong>Project:</strong> Port substantial open source projects to work in naclports.</li> +<li><strong>Brief explanation:</strong> naclports contains a large collection of open source +projects that properly compile and run on the PNaCl platform. This project +involves adding new useful projects to naclports, and upstreaming any patches +to the original project: running on PNaCl effective involves porting to a new +architecture and operating system. Project ideas include: Gimp, Inkscape, Gtk.</li> +<li><strong>Expected results:</strong> New open source projects are usable from naclports.</li> +<li><strong>Knowledge Prerequisite:</strong> C/C++.</li> +<li><strong>Mentor:</strong> Brad Nelson.</li> +</ul> +<h3 id="languages">Languages</h3> +<p>PNaCl already has support for C and C++, and virtual machines such as +JavaScript, Lua, Python and Ruby. We’d like to support more languages, either by +having these languages target LLVM bitcode or by making sure that the language +virtual machine’s APIs work well on the Web platform.</p> +<h4 id="rust">Rust</h4> +<ul class="small-gap"> +<li><strong>Project:</strong> Support the Rust programming languages.</li> +<li><strong>Brief explanation:</strong> The <a class="reference external" href="http://www.rust-lang.org">Rust</a> programming language uses LLVM. The aim of +this project is to allow it to deliver PNaCl <code>.pexe</code> files.</li> +<li><strong>Expected results:</strong> The Rust test suite passes within the browser. How to +use Rust to target PNaCl is well documented and easy to do.</li> +<li><strong>Knowledge Prerequisite:</strong> Compilers, LLVM.</li> +<li><strong>Mentor:</strong> Ben Smith.</li> +</ul> +<h4 id="haskell">Haskell</h4> +<ul class="small-gap"> +<li><strong>Project:</strong> Support the Haskell programming language.</li> +<li><strong>Brief explanation:</strong> <a class="reference external" href="http://www.haskell.org/ghc/docs/latest/html/users_guide/code-generators.html">GHC</a> targets LLVM. The aim of this project is to allow +it to deliver PNaCl <code>.pexe</code> files. One interesting difficulty will be to +ensure that tail call optimization occurs properly in all targets.</li> +<li><strong>Expected results:</strong> The Haskell test suite passes within the browser. How to +use Haskell to target PNaCl is well documented and easy to do.</li> +<li><strong>Knowledge Prerequisite:</strong> Compilers, LLVM.</li> +<li><strong>Mentor:</strong> Ben Smith.</li> +</ul> +<h4 id="julia">Julia</h4> +<ul class="small-gap"> +<li><strong>Project:</strong> Support the Julia programming language.</li> +<li><strong>Brief explanation:</strong> <a class="reference external" href="http://julialang.org">Julia</a> targets LLVM, but it does so through LLVM’s +Just-in-Time compiler which PNaCl doens’t support. The aim of this project is +to allow it to deliver PNaCl <code>.pexe</code> files.</li> +<li><strong>Expected results:</strong> The Julia test suite passes within the browser. How to +use Julia to target PNaCl is well documented and easy to do.</li> +<li><strong>Knowledge Prerequisite:</strong> Compilers, LLVM.</li> +<li><strong>Mentor:</strong> Ben Smith.</li> +</ul> +<h4 id="scala">Scala</h4> +<ul class="small-gap"> +<li><strong>Project:</strong> Support the Scala programming language.</li> +<li><strong>Brief explanation:</strong> The aim of this project is to allow <a class="reference external" href="http://www.scala-lang.org">Scala</a> to deliver +PNaCl <code>.pexe</code> files.</li> +<li><strong>Expected results:</strong> The Scala test suite passes within the browser. How to +use Scala to target PNaCl is well documented and easy to do.</li> +<li><strong>Knowledge Prerequisite:</strong> Compilers.</li> +<li><strong>Mentor:</strong> Ben Smith.</li> +</ul> +<h4 id="elm">Elm</h4> +<ul class="small-gap"> +<li><strong>Project:</strong> Support the Elm programming language.</li> +<li><strong>Brief explanation:</strong> The aim of this project is to allow <a class="reference external" href="http://elm-lang.org">Elm</a> to deliver +PNaCl <code>.pexe</code> files.</li> +<li><strong>Expected results:</strong> The Elm test suite passes within the browser. How to use +Elm to target PNaCl is well documented and easy to do.</li> +<li><strong>Knowledge Prerequisite:</strong> Compilers.</li> +<li><strong>Mentor:</strong> Jan Voung.</li> +</ul> +<h4 id="mono">Mono</h4> +<ul class="small-gap"> +<li><strong>Project:</strong> Support C# running inside Mono.</li> +<li><strong>Brief explanation:</strong> C# is traditionally a Just-in-Time compiled language, +the aim of this project is to be able to run C# code withing <a class="reference external" href="http://www.mono-project.com">Mono</a> while +compiling ahead-of-time.</li> +<li><strong>Expected results:</strong> The Mono test suite passes within the browser. How to +use Mono to target PNaCl is well documented and easy to do.</li> +<li><strong>Knowledge Prerequisite:</strong> Compilers.</li> +<li><strong>Mentor:</strong> Derek Schuff.</li> +</ul> +<h4 id="perl">Perl</h4> +<ul class="small-gap"> +<li><strong>Project:</strong> Support Perl.</li> +<li><strong>Brief explanation:</strong> Port the Perl programming language and its packages to +the PNaCl platform.</li> +<li><strong>Expected results:</strong> The Perl test suite passes within the browser. How to +use Perl to target PNaCl is well documented and easy to do.</li> +<li><strong>Knowledge Prerequisite:</strong> C.</li> +<li><strong>Mentor:</strong> Brad Nelson.</li> +</ul> +<h3 id="tcc">TCC</h3> +<ul class="small-gap"> +<li><strong>Project:</strong> Port Fabrice Ballard’s Tiny C Compiler _TCC to NaCl and PNaCl.</li> +<li><strong>Brief explanation:</strong> Port TCC to NaCl and enhance to follow NaCl sandboxing +rule, as well as emitting PNaCl bitcode. The same could be done with <a class="reference external" href="https://code.google.com/p/picoc">Pico +C</a>.</li> +<li><strong>Expected results:</strong> Compiler ported and code generator working. Can run a +small benchmark of your choice.</li> +<li><strong>Knowledge Prerequisite:</strong> C, assembly, compilers.</li> +</ul> +<h3 id="llvm-and-pnacl">LLVM and PNaCl</h3> +<p>PNaCl relies heavily on LLVM in two key areas:</p> +<ul class="small-gap"> +<li>On the developer’s machine, LLVM is used as a regular toolchain to parse code, +optimize it, and create a portable executable.</li> +<li>On user devices, LLVM is installed as part of Chrome to translate a portable +executable into a machine-specific sandboxed executable.</li> +</ul> +<p>Most of the contribution ideas around LLVM would occur in the upstream LLVM +repository, and would improve LLVM for more than just PNaCl’s sake (though PNaCl +is of course benefiting from these improvements!). Some of these ideas would +also apply to <a class="reference external" href="https://chromium.googlesource.com/native_client/pnacl-subzero/+/master/README.rst">Subzero</a>, a small and fast translator from portable executable to +machine-specific code.</p> +<h4 id="sandboxing-optimizations">Sandboxing Optimizations</h4> +<ul class="small-gap"> +<li><strong>Project:</strong> Improved sandboxed code generation.</li> +<li><strong>Brief explanation:</strong> PNaCl generates code that targets the NaCl sandbox, but +this code generation isn’t always optimal and sometimes results in a +performance lost of 10% to 25% compared to unsandboxed code. This project +would require looking at the x86-32, x86-64, ARM and MIPS code being generated +by LLVM or Subzero and figuring out how it can be improved to execute +faster. As an example, one could write a compiler pass to figure out when +doing a zero-extending <code>lea</code> on NaCl x86-64 would be useful (increment and +sandbox), or see if <code>%rbp</code> can be used more for loads/stores unrelated to +the call frame.</li> +<li><strong>Expected results:</strong> Sandboxed code runs measurably faster, and gets much +closer to unsandboxed code performance. PNaCl has a fairly extensive +performance test suite to measure these improvements.</li> +<li><strong>Knowledge Prerequisite:</strong> Compilers, assembly.</li> +<li><strong>Mentor:</strong> Jan Voung.</li> +</ul> +<h4 id="binary-size-reduction">Binary Size Reduction</h4> +<ul class="small-gap"> +<li><strong>Project:</strong> Reduce the size of binaries generated by LLVM.</li> +<li><strong>Brief explanation:</strong> This is generally useful for the LLVM project, but is +especially important for PNaCl and Emscripten because we deliver code on the +Web (transfer size and compile time matter!). This stands to drastically +improve transfer time, and load time. Reduces the size of the PNaCl translator +as well as user code, makes the generated portable executables smaller and +translation size faster. Improve LLVM’s <code>mergefuncs</code> pass to reduce +redundancy of code. Detect functions and data that aren’t used. Improve +partial evaluation: can e.g. LLVM’s command-line parsing be mostly removed +from the PNaCl translator? Potentially add a pass where a developer manually +marks functions as unused, and have LLVM replace them with <code>abort</code> (this +should propagate and mark other code as dead). This list could be created by +using code coverage information.</li> +<li><strong>Expected results:</strong> Portable executables in the PNaCl repository are +measurably smaller and translate faster.</li> +<li><strong>Knowledge Prerequisite:</strong> LLVM bitcode.</li> +<li><strong>Mentor:</strong> JF Bastien.</li> +</ul> +<h4 id="vector-support">Vector Support</h4> +<ul class="small-gap"> +<li><strong>Project:</strong> Improve PNaCl SIMD support.</li> +<li><strong>Brief explanation:</strong> PNaCl offers speed on the Web, and generating good SIMD +code allows developers to use the full capabilities of the device (better user +experience, longer battery life). The goal of this project is to allow +developers to use more hardware features in a portable manner by exposing +portable SIMD primitives and using auto-vectorization. This could also mean +making the architecture-specific intrinsics “just work” within PNaCl (lower +them to equivalent architecture-independent intrinsics).</li> +<li><strong>Expected results:</strong> Sample code and existing applications run measurably +faster by using portable SIMD and/or by auto-vectorizing.</li> +<li><strong>Knowledge Prerequisite:</strong> Compilers, high-performance code tuning.</li> +<li><strong>Mentor:</strong> JF Bastien.</li> +</ul> +<h4 id="atomics">Atomics</h4> +<ul class="small-gap"> +<li><strong>Project:</strong> Improve the performance of C++11 atomics.</li> +<li><strong>Brief explanation:</strong> C++11 atomics allow programmers to shed inline assembly +and use language-level features to express high-performance code. This is +great for portability, but atomics currently aren’t as fast as they could be +on all platforms. We had an intern work on this in the summer of 2014, see his +LLVM developer conference presentation <a class="reference external" href="http://llvm.org/devmtg/2014-10/#talk10">Blowing up the atomic barrier</a>. This +project would be a continuation of this work: improve LLVM’s code generation +for atomics.</li> +<li><strong>Expected results:</strong> Code using C++11 atomics runs measurably faster on +different architectures.</li> +<li><strong>Knowledge Prerequisite:</strong> Compilers, memory models.</li> +<li><strong>Mentor:</strong> JF Bastien.</li> +</ul> +<h4 id="security-enhanced-pnacl">Security-enhanced PNaCl</h4> +<ul class="small-gap"> +<li><strong>Project:</strong> Security in-depth for PNaCl.</li> +<li><strong>Brief explanation:</strong> PNaCl brings native code to the Web, and we want to +improve the security of the platform as well as explore novel mitigations. +This allows PNaCl to take better advantage of the hardware and operating +system it’s running on and makes the platform even faster while keeping users +safe. It’s also useful for non-browser uses of PNaCl such as running untrusted +code in the Cloud. A few areas to explore are: code randomization for LLVM and +Subzero, fuzzing of the translator, code hiding at compilation time, and code +tuning to the hardware and operating system the untrusted code is running on.</li> +<li><strong>Expected results:</strong> The security design and implementation successfully pass +a review with the Chrome security team.</li> +<li><strong>Knowledge Prerequisite:</strong> Security.</li> +<li><strong>Mentor:</strong> JF Bastien.</li> +</ul> +<h3 id="nacl">NaCl</h3> +<h4 id="auto-sandboxing">Auto-Sandboxing</h4> +<ul class="small-gap"> +<li><strong>Project:</strong> Auto-sandboxing assembler.</li> +<li><strong>Brief explanation:</strong> NaCl has a toolchain which can sandbox native +code. This toolchain can consume C/C++ as well as pre-sandboxed assembly, or +assembly which uses special sandboxing macros. The goal of this project is to +follow NaCl’s sandboxing requirements automatically which compiling assembly +files.</li> +<li><strong>Expected results:</strong> Existing assembly code can be compiled to a native +executable that follows NaCl’s sandboxing rules.</li> +<li><strong>Knowledge Prerequisite:</strong> Assemblers.</li> +<li><strong>Mentor:</strong> Derek Schuff, Roland McGrath.</li> +</ul> +<h4 id="new-sandbox">New Sandbox</h4> +<ul class="small-gap"> +<li><strong>Project:</strong> Create a new software-fault isolation sandbox.</li> +<li><strong>Brief explanation:</strong> NaCl pioneered production-quality sandboxes based on +software-fault isolation, and currently supports x86-32, x86-64, ARMv7’s ARM, +and MIPS. This project involves designing and implementing new sandboxes. Of +particular interest are ARMv8’s aarch64 and Power8. This also requires +implementing sandboxing in the compiler.</li> +<li><strong>Expected results:</strong> The new sandbox’s design and implementation successfully +pass a review with the Chrome security team. Existing NaCl code successfully +runs in the new sandbox.</li> +<li><strong>Knowledge Prerequisite:</strong> Security, low-level assembly, compilers, LLVM.</li> +<li><strong>Mentor:</strong> David Sehr.</li> +</ul> +<h4 id="bit-sandbox">64-bit Sandbox</h4> +<ul class="small-gap"> +<li><strong>Project:</strong> Create a 64-bit sandbox.</li> +<li><strong>Brief explanation:</strong> NaCl currently supports sandboxes where pointers are +32-bits. Some applications, both in-browser and not in-browser, would benefit +from a larger address space. This project involves designing and implementing +a model for 64-bit sandboxes on all architecture NaCl currently supports. This +also requires supporting 64-bit pointers in PNaCl using the <code>le64</code> platform, +and updating the code generation for each platform.</li> +<li><strong>Expected results:</strong> The new sandbox’s design and implementation successfully +pass a review with the Chrome security team. Existing NaCl code successfully +runs in the new sandbox.</li> +<li><strong>Knowledge Prerequisite:</strong> Security, low-level assembly, compilers, LLVM.</li> +<li><strong>Mentor:</strong> David Sehr.</li> +</ul> +</section> + +{{/partials.standard_nacl_article}} diff --git a/native_client_sdk/doc_generated/sitemap.html b/native_client_sdk/doc_generated/sitemap.html index e605318..f6cfcb2 100644 --- a/native_client_sdk/doc_generated/sitemap.html +++ b/native_client_sdk/doc_generated/sitemap.html @@ -382,6 +382,11 @@ </ul> </li> <li class="toctree-l1"><a class="reference internal" href="/native-client/reference/index.html">Reference</a></li> +<li class="toctree-l1"><a class="reference internal" href="/native-client/reference/ideas.html">Contributor Ideas</a><ul class="small-gap"> +<li class="toctree-l2"><a class="reference internal" href="/native-client/reference/ideas.html#contributing-me">Contributing? Me‽</a></li> +<li class="toctree-l2"><a class="reference internal" href="/native-client/reference/ideas.html#id1">Ideas</a></li> +</ul> +</li> <li class="toctree-l1"><a class="reference internal" href="/native-client/reference/pnacl-bitcode-abi.html">PNaCl Bitcode Reference Manual</a><ul class="small-gap"> <li class="toctree-l2"><a class="reference internal" href="/native-client/reference/pnacl-bitcode-abi.html#introduction">Introduction</a></li> <li class="toctree-l2"><a class="reference internal" href="/native-client/reference/pnacl-bitcode-abi.html#high-level-structure">High Level Structure</a></li> diff --git a/native_client_sdk/src/doc/_book.yaml b/native_client_sdk/src/doc/_book.yaml index c4abc38b..075adfb 100644 --- a/native_client_sdk/src/doc/_book.yaml +++ b/native_client_sdk/src/doc/_book.yaml @@ -69,6 +69,8 @@ toc: - title: "Glossary" path: /native-client/dev/glossary - include: /native-client/dev/_reference_toc.yaml + - title: "Contributor Ideas" + path: /native-client/dev/reference/ideas - title: "Native Client Manifest (nmf) Format" path: /native-client/dev/reference/nacl-manifest-format - title: "Contents of PNaCl Bitcode Files" diff --git a/native_client_sdk/src/doc/faq.rst b/native_client_sdk/src/doc/faq.rst index e3a7b4e..5108f5e 100644 --- a/native_client_sdk/src/doc/faq.rst +++ b/native_client_sdk/src/doc/faq.rst @@ -201,6 +201,11 @@ standardize Portable Native Client when it gains more traction. A good example is our :doc:`PNaCl bitcode reference manual <reference/pnacl-bitcode-abi>`. +How can I contribute to Native Client? +-------------------------------------- + +Read about :doc:`contributor ideas <reference/ideas>`. + What are the supported instruction set architectures? ----------------------------------------------------- @@ -241,7 +246,8 @@ languages such as Rust_, Go_, or Objective-C, but there may still be a few rough edges. If you're interested in getting other languages working, please contact the -Native Client team by way of the native-client-discuss_ mailing list. +Native Client team by way of the native-client-discuss_ mailing list, and read +through :doc:`contributor ideas <reference/ideas>`. Do you only support Chrome? What about other browsers? ------------------------------------------------------ @@ -450,7 +456,9 @@ Is my favorite third-party library available for Native Client? Google has ported several third-party libraries to Native Client; such libraries are available in the naclports_ project. We encourage you to contribute libraries to naclports, and/or to host your own ported libraries, and to let the -team know about it on native-client-discuss_ when you do. +team know about it on native-client-discuss_ when you do. You can also read +through :doc:`contributor ideas <reference/ideas>` to find ideas of new projects +to port. Do all the files in an application need to be served from the same domain? -------------------------------------------------------------------------- diff --git a/native_client_sdk/src/doc/reference/ideas.rst b/native_client_sdk/src/doc/reference/ideas.rst new file mode 100644 index 0000000..71d4360 --- /dev/null +++ b/native_client_sdk/src/doc/reference/ideas.rst @@ -0,0 +1,361 @@ +.. _ideas: + +################# +Contributor Ideas +################# + +.. contents:: + :local: + :backlinks: none + :depth: 3 + +Contributing? Me‽ +================= + +NaCl and PNaCl are very big projects: they expose an entire operating system to +developers, interact with all of the Web platform, and deal with compilers +extensively to allow code written in essentially any programming language to +execute on a variety of CPU architectures. This can be daunting when trying to +figure out how to contribute to the open-source project! This page tries to make +contributing easier by listing project ideas by broad area of interest, and +detailing the required experience and expectations for each idea. + +This isn't meant to constrain contributions! If you have ideas that aren't on +this page please contact the native-client-discuss_ mailing list. + +If you like an idea on this page and would like to get started, contact the +native-client-discuss_ mailing list so that we can help you find a mentor. + +.. _native-client-discuss: https://groups.google.com/group/native-client-discuss + +Ideas +===== + +We've separated contributor ideas into broad areas of interest: + +* **Ports** encompass all the code that *uses* the PNaCl platform. Put simply, + the point of ports is to make existing open-source code work. +* **Programming languages** sometimes involves compiler work, and sometimes + requires getting an interpreter and its APIs to work well within the Web + platform. +* **LLVM and PNaCl** requires compiler work: PNaCl is based on the LLVM + toolchain, and most of the work in this area would occur in the upstream LLVM + repository. +* **NaCl** mostly deals with low-level systems work and security. + + +.. + Adding a proposal to this document should follow this format: + Project: *project title* + Brief explanation: *brief description* + Expected results: *how do we evaluate the project's success?* + Knowledge Prerequisite: *programming languages, CS topics, ...* + Mentor: *one or multiple, their roles in this project* + The above list is inspired by the Google Summer of Code guidelines, and the + KDE project list. + +Ports +----- + +New Filesystems +^^^^^^^^^^^^^^^ + +* **Project:** Expose new filesystems to :doc:`nacl_io + </devguide/coding/nacl_io>`. +* **Brief explanation:** nacl_io exposes filesystems like html5fs and RAM disk, + which can be mounted and then accessed through regular POSIX APIs. New types + of filesystems could be exposed in a similar way, allowing developers to build + apps that "just work" on the Web platform while using Web APIs. A few ideas + include connecting to: Google Drive, Github, Dropbox. +* **Expected results:** A new filesystem is mountable using nacl_io, is well + tested, and used in a demo application. +* **Knowledge Prerequisite:** C++. +* **Mentor:** Sam Clegg. + +Open Source Porting +^^^^^^^^^^^^^^^^^^^ + +* **Project:** Port substantial open source projects to work in naclports. +* **Brief explanation:** naclports contains a large collection of open source + projects that properly compile and run on the PNaCl platform. This project + involves adding new useful projects to naclports, and upstreaming any patches + to the original project: running on PNaCl effective involves porting to a new + architecture and operating system. Project ideas include: Gimp, Inkscape, Gtk. +* **Expected results:** New open source projects are usable from naclports. +* **Knowledge Prerequisite:** C/C++. +* **Mentor:** Brad Nelson. + + +Languages +--------- + +PNaCl already has support for C and C++, and virtual machines such as +JavaScript, Lua, Python and Ruby. We'd like to support more languages, either by +having these languages target LLVM bitcode or by making sure that the language +virtual machine's APIs work well on the Web platform. + +Rust +^^^^ + +* **Project:** Support the Rust programming languages. +* **Brief explanation:** The Rust_ programming language uses LLVM. The aim of + this project is to allow it to deliver PNaCl ``.pexe`` files. +* **Expected results:** The Rust test suite passes within the browser. How to + use Rust to target PNaCl is well documented and easy to do. +* **Knowledge Prerequisite:** Compilers, LLVM. +* **Mentor:** Ben Smith. + +.. _Rust: http://www.rust-lang.org + +Haskell +^^^^^^^ + +* **Project:** Support the Haskell programming language. +* **Brief explanation:** GHC_ targets LLVM. The aim of this project is to allow + it to deliver PNaCl ``.pexe`` files. One interesting difficulty will be to + ensure that tail call optimization occurs properly in all targets. +* **Expected results:** The Haskell test suite passes within the browser. How to + use Haskell to target PNaCl is well documented and easy to do. +* **Knowledge Prerequisite:** Compilers, LLVM. +* **Mentor:** Ben Smith. + +.. _GHC: + http://www.haskell.org/ghc/docs/latest/html/users_guide/code-generators.html + +Julia +^^^^^ + +* **Project:** Support the Julia programming language. +* **Brief explanation:** Julia_ targets LLVM, but it does so through LLVM's + Just-in-Time compiler which PNaCl doens't support. The aim of this project is + to allow it to deliver PNaCl ``.pexe`` files. +* **Expected results:** The Julia test suite passes within the browser. How to + use Julia to target PNaCl is well documented and easy to do. +* **Knowledge Prerequisite:** Compilers, LLVM. +* **Mentor:** Ben Smith. + +.. _Julia: http://julialang.org + +Scala +^^^^^ + +* **Project:** Support the Scala programming language. +* **Brief explanation:** The aim of this project is to allow Scala_ to deliver + PNaCl ``.pexe`` files. +* **Expected results:** The Scala test suite passes within the browser. How to + use Scala to target PNaCl is well documented and easy to do. +* **Knowledge Prerequisite:** Compilers. +* **Mentor:** Ben Smith. + +.. _Scala: http://www.scala-lang.org + +Elm +^^^ + +* **Project:** Support the Elm programming language. +* **Brief explanation:** The aim of this project is to allow Elm_ to deliver + PNaCl ``.pexe`` files. +* **Expected results:** The Elm test suite passes within the browser. How to use + Elm to target PNaCl is well documented and easy to do. +* **Knowledge Prerequisite:** Compilers. +* **Mentor:** Jan Voung. + +.. _Elm: http://elm-lang.org + +Mono +^^^^ + +* **Project:** Support C# running inside Mono. +* **Brief explanation:** C# is traditionally a Just-in-Time compiled language, + the aim of this project is to be able to run C# code withing Mono_ while + compiling ahead-of-time. +* **Expected results:** The Mono test suite passes within the browser. How to + use Mono to target PNaCl is well documented and easy to do. +* **Knowledge Prerequisite:** Compilers. +* **Mentor:** Derek Schuff. + +.. _Mono: http://www.mono-project.com + +Perl +^^^^ + +* **Project:** Support Perl. +* **Brief explanation:** Port the Perl programming language and its packages to + the PNaCl platform. +* **Expected results:** The Perl test suite passes within the browser. How to + use Perl to target PNaCl is well documented and easy to do. +* **Knowledge Prerequisite:** C. +* **Mentor:** Brad Nelson. + +TCC +--- + +* **Project:** Port Fabrice Ballard's Tiny C Compiler _TCC to NaCl and PNaCl. +* **Brief explanation:** Port TCC to NaCl and enhance to follow NaCl sandboxing + rule, as well as emitting PNaCl bitcode. The same could be done with `Pico + C`_. +* **Expected results:** Compiler ported and code generator working. Can run a + small benchmark of your choice. +* **Knowledge Prerequisite:** C, assembly, compilers. + +.. _TCC: http://bellard.org/tcc/ +.. _`Pico C`: https://code.google.com/p/picoc + + +LLVM and PNaCl +-------------- + +PNaCl relies heavily on LLVM in two key areas: + +* On the developer's machine, LLVM is used as a regular toolchain to parse code, + optimize it, and create a portable executable. +* On user devices, LLVM is installed as part of Chrome to translate a portable + executable into a machine-specific sandboxed executable. + +Most of the contribution ideas around LLVM would occur in the upstream LLVM +repository, and would improve LLVM for more than just PNaCl's sake (though PNaCl +is of course benefiting from these improvements!). Some of these ideas would +also apply to Subzero_, a small and fast translator from portable executable to +machine-specific code. + +.. _Subzero: https://chromium.googlesource.com/native_client/pnacl-subzero/+/master/README.rst + +Sandboxing Optimizations +^^^^^^^^^^^^^^^^^^^^^^^^ + +* **Project:** Improved sandboxed code generation. +* **Brief explanation:** PNaCl generates code that targets the NaCl sandbox, but + this code generation isn't always optimal and sometimes results in a + performance lost of 10% to 25% compared to unsandboxed code. This project + would require looking at the x86-32, x86-64, ARM and MIPS code being generated + by LLVM or Subzero and figuring out how it can be improved to execute + faster. As an example, one could write a compiler pass to figure out when + doing a zero-extending ``lea`` on NaCl x86-64 would be useful (increment and + sandbox), or see if ``%rbp`` can be used more for loads/stores unrelated to + the call frame. +* **Expected results:** Sandboxed code runs measurably faster, and gets much + closer to unsandboxed code performance. PNaCl has a fairly extensive + performance test suite to measure these improvements. +* **Knowledge Prerequisite:** Compilers, assembly. +* **Mentor:** Jan Voung. + +Binary Size Reduction +^^^^^^^^^^^^^^^^^^^^^ + +* **Project:** Reduce the size of binaries generated by LLVM. +* **Brief explanation:** This is generally useful for the LLVM project, but is + especially important for PNaCl and Emscripten because we deliver code on the + Web (transfer size and compile time matter!). This stands to drastically + improve transfer time, and load time. Reduces the size of the PNaCl translator + as well as user code, makes the generated portable executables smaller and + translation size faster. Improve LLVM’s ``mergefuncs`` pass to reduce + redundancy of code. Detect functions and data that aren’t used. Improve + partial evaluation: can e.g. LLVM’s command-line parsing be mostly removed + from the PNaCl translator? Potentially add a pass where a developer manually + marks functions as unused, and have LLVM replace them with ``abort`` (this + should propagate and mark other code as dead). This list could be created by + using code coverage information. +* **Expected results:** Portable executables in the PNaCl repository are + measurably smaller and translate faster. +* **Knowledge Prerequisite:** LLVM bitcode. +* **Mentor:** JF Bastien. + +Vector Support +^^^^^^^^^^^^^^ + +* **Project:** Improve PNaCl SIMD support. +* **Brief explanation:** PNaCl offers speed on the Web, and generating good SIMD + code allows developers to use the full capabilities of the device (better user + experience, longer battery life). The goal of this project is to allow + developers to use more hardware features in a portable manner by exposing + portable SIMD primitives and using auto-vectorization. This could also mean + making the architecture-specific intrinsics “just work” within PNaCl (lower + them to equivalent architecture-independent intrinsics). +* **Expected results:** Sample code and existing applications run measurably + faster by using portable SIMD and/or by auto-vectorizing. +* **Knowledge Prerequisite:** Compilers, high-performance code tuning. +* **Mentor:** JF Bastien. + +Atomics +^^^^^^^ + +* **Project:** Improve the performance of C++11 atomics. +* **Brief explanation:** C++11 atomics allow programmers to shed inline assembly + and use language-level features to express high-performance code. This is + great for portability, but atomics currently aren't as fast as they could be + on all platforms. We had an intern work on this in the summer of 2014, see his + LLVM developer conference presentation `Blowing up the atomic barrier`_. This + project would be a continuation of this work: improve LLVM's code generation + for atomics. +* **Expected results:** Code using C++11 atomics runs measurably faster on + different architectures. +* **Knowledge Prerequisite:** Compilers, memory models. +* **Mentor:** JF Bastien. + +.. _`Blowing up the atomic barrier`: http://llvm.org/devmtg/2014-10/#talk10 + +Security-enhanced PNaCl +^^^^^^^^^^^^^^^^^^^^^^^ + +* **Project:** Security in-depth for PNaCl. +* **Brief explanation:** PNaCl brings native code to the Web, and we want to + improve the security of the platform as well as explore novel mitigations. + This allows PNaCl to take better advantage of the hardware and operating + system it's running on and makes the platform even faster while keeping users + safe. It’s also useful for non-browser uses of PNaCl such as running untrusted + code in the Cloud. A few areas to explore are: code randomization for LLVM and + Subzero, fuzzing of the translator, code hiding at compilation time, and code + tuning to the hardware and operating system the untrusted code is running on. +* **Expected results:** The security design and implementation successfully pass + a review with the Chrome security team. +* **Knowledge Prerequisite:** Security. +* **Mentor:** JF Bastien. + + +NaCl +---- + +Auto-Sandboxing +^^^^^^^^^^^^^^^ + +* **Project:** Auto-sandboxing assembler. +* **Brief explanation:** NaCl has a toolchain which can sandbox native + code. This toolchain can consume C/C++ as well as pre-sandboxed assembly, or + assembly which uses special sandboxing macros. The goal of this project is to + follow NaCl's sandboxing requirements automatically which compiling assembly + files. +* **Expected results:** Existing assembly code can be compiled to a native + executable that follows NaCl's sandboxing rules. +* **Knowledge Prerequisite:** Assemblers. +* **Mentor:** Derek Schuff, Roland McGrath. + +New Sandbox +^^^^^^^^^^^ + +* **Project:** Create a new software-fault isolation sandbox. +* **Brief explanation:** NaCl pioneered production-quality sandboxes based on + software-fault isolation, and currently supports x86-32, x86-64, ARMv7's ARM, + and MIPS. This project involves designing and implementing new sandboxes. Of + particular interest are ARMv8's aarch64 and Power8. This also requires + implementing sandboxing in the compiler. +* **Expected results:** The new sandbox's design and implementation successfully + pass a review with the Chrome security team. Existing NaCl code successfully + runs in the new sandbox. +* **Knowledge Prerequisite:** Security, low-level assembly, compilers, LLVM. +* **Mentor:** David Sehr. + +64-bit Sandbox +^^^^^^^^^^^^^^ + +* **Project:** Create a 64-bit sandbox. +* **Brief explanation:** NaCl currently supports sandboxes where pointers are + 32-bits. Some applications, both in-browser and not in-browser, would benefit + from a larger address space. This project involves designing and implementing + a model for 64-bit sandboxes on all architecture NaCl currently supports. This + also requires supporting 64-bit pointers in PNaCl using the ``le64`` platform, + and updating the code generation for each platform. +* **Expected results:** The new sandbox's design and implementation successfully + pass a review with the Chrome security team. Existing NaCl code successfully + runs in the new sandbox. +* **Knowledge Prerequisite:** Security, low-level assembly, compilers, LLVM. +* **Mentor:** David Sehr. diff --git a/native_client_sdk/src/doc/sitemap.rst b/native_client_sdk/src/doc/sitemap.rst index 7a50f89..b1c9c06 100644 --- a/native_client_sdk/src/doc/sitemap.rst +++ b/native_client_sdk/src/doc/sitemap.rst @@ -56,6 +56,7 @@ Contents: c-api-dev.rst cpp-api-dev.rst reference/index.rst + reference/ideas.rst reference/pnacl-bitcode-abi.rst reference/pnacl-bitcode-manual.rst reference/pnacl-c-cpp-language-support.rst |