| 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..71d43600c5a066bf85855c47cf83984a7437eb9f
|
| --- /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.
|
|
|