Chromium Code Reviews| Index: native_client_sdk/src/doc/reference/ideas.rst |
| 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 0000000000000000000000000000000000000000..ab4ca3a0b7fb493202a18bfaebbcfc61cc0a3ed0 |
| --- /dev/null |
| +++ b/native_client_sdk/src/doc/reference/ideas.rst |
| @@ -0,0 +1,347 @@ |
| +.. _ideas: |
| + |
| +================= |
| +Contributor Ideas |
| +================= |
|
Sam Clegg
2015/02/12 18:18:50
The convention seems to be to use ##### for the ma
JF
2015/02/12 19:38:25
Done.
|
| + |
| +.. 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. |
|
Sam Clegg
2015/02/12 18:18:50
I'm happy to mentor this one too if Brad is overlo
bradn
2015/02/12 19:38:03
That would fine.
JF
2015/02/12 19:38:25
Fine which way? You or Sam?
|
| + |
| + |
| +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. |
|
bradn
2015/02/12 19:38:03
Joy :-)
|
| + |
|
bradn
2015/02/12 19:38:03
TCC
----
* **Project: Port Fabrice Ballard's TCC t
JF
2015/02/12 19:42:38
Done.
|
| + |
| +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. |