OLD | NEW |
(Empty) | |
| 1 {{+bindTo:partials.standard_nacl_article}} |
| 2 |
| 3 <section id="contributor-ideas"> |
| 4 <span id="ideas"></span><h1 id="contributor-ideas"><span id="ideas"></span>Contr
ibutor Ideas</h1> |
| 5 <div class="contents local" id="contents" style="display: none"> |
| 6 <ul class="small-gap"> |
| 7 <li><a class="reference internal" href="#contributing-me" id="id8">Contributing?
Me‽</a></li> |
| 8 <li><p class="first"><a class="reference internal" href="#id1" id="id9">Ideas</a
></p> |
| 9 <ul class="small-gap"> |
| 10 <li><p class="first"><a class="reference internal" href="#ports" id="id10">Ports
</a></p> |
| 11 <ul class="small-gap"> |
| 12 <li><a class="reference internal" href="#new-filesystems" id="id11">New Filesyst
ems</a></li> |
| 13 <li><a class="reference internal" href="#open-source-porting" id="id12">Open Sou
rce Porting</a></li> |
| 14 </ul> |
| 15 </li> |
| 16 <li><p class="first"><a class="reference internal" href="#languages" id="id13">L
anguages</a></p> |
| 17 <ul class="small-gap"> |
| 18 <li><a class="reference internal" href="#rust" id="id14">Rust</a></li> |
| 19 <li><a class="reference internal" href="#haskell" id="id15">Haskell</a></li> |
| 20 <li><a class="reference internal" href="#julia" id="id16">Julia</a></li> |
| 21 <li><a class="reference internal" href="#scala" id="id17">Scala</a></li> |
| 22 <li><a class="reference internal" href="#elm" id="id18">Elm</a></li> |
| 23 <li><a class="reference internal" href="#mono" id="id19">Mono</a></li> |
| 24 <li><a class="reference internal" href="#perl" id="id20">Perl</a></li> |
| 25 </ul> |
| 26 </li> |
| 27 <li><a class="reference internal" href="#tcc" id="id21">TCC</a></li> |
| 28 <li><p class="first"><a class="reference internal" href="#llvm-and-pnacl" id="id
22">LLVM and PNaCl</a></p> |
| 29 <ul class="small-gap"> |
| 30 <li><a class="reference internal" href="#sandboxing-optimizations" id="id23">San
dboxing Optimizations</a></li> |
| 31 <li><a class="reference internal" href="#binary-size-reduction" id="id24">Binary
Size Reduction</a></li> |
| 32 <li><a class="reference internal" href="#vector-support" id="id25">Vector Suppor
t</a></li> |
| 33 <li><a class="reference internal" href="#atomics" id="id26">Atomics</a></li> |
| 34 <li><a class="reference internal" href="#security-enhanced-pnacl" id="id27">Secu
rity-enhanced PNaCl</a></li> |
| 35 </ul> |
| 36 </li> |
| 37 <li><p class="first"><a class="reference internal" href="#nacl" id="id28">NaCl</
a></p> |
| 38 <ul class="small-gap"> |
| 39 <li><a class="reference internal" href="#auto-sandboxing" id="id29">Auto-Sandbox
ing</a></li> |
| 40 <li><a class="reference internal" href="#new-sandbox" id="id30">New Sandbox</a><
/li> |
| 41 <li><a class="reference internal" href="#bit-sandbox" id="id31">64-bit Sandbox</
a></li> |
| 42 </ul> |
| 43 </li> |
| 44 </ul> |
| 45 </li> |
| 46 </ul> |
| 47 |
| 48 </div><h2 id="contributing-me">Contributing? Me‽</h2> |
| 49 <p>NaCl and PNaCl are very big projects: they expose an entire operating system
to |
| 50 developers, interact with all of the Web platform, and deal with compilers |
| 51 extensively to allow code written in essentially any programming language to |
| 52 execute on a variety of CPU architectures. This can be daunting when trying to |
| 53 figure out how to contribute to the open-source project! This page tries to make |
| 54 contributing easier by listing project ideas by broad area of interest, and |
| 55 detailing the required experience and expectations for each idea.</p> |
| 56 <p>This isn’t meant to constrain contributions! If you have ideas that are
n’t on |
| 57 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> |
| 58 <p>If you like an idea on this page and would like to get started, contact the |
| 59 <a class="reference external" href="https://groups.google.com/group/native-clien
t-discuss">native-client-discuss</a> mailing list so that we can help you find a
mentor.</p> |
| 60 <h2 id="id1">Ideas</h2> |
| 61 <p>We’ve separated contributor ideas into broad areas of interest:</p> |
| 62 <ul class="small-gap"> |
| 63 <li><strong>Ports</strong> encompass all the code that <em>uses</em> the PNaCl p
latform. Put simply, |
| 64 the point of ports is to make existing open-source code work.</li> |
| 65 <li><strong>Programming languages</strong> sometimes involves compiler work, and
sometimes |
| 66 requires getting an interpreter and its APIs to work well within the Web |
| 67 platform.</li> |
| 68 <li><strong>LLVM and PNaCl</strong> requires compiler work: PNaCl is based on th
e LLVM |
| 69 toolchain, and most of the work in this area would occur in the upstream LLVM |
| 70 repository.</li> |
| 71 <li><strong>NaCl</strong> mostly deals with low-level systems work and security.
</li> |
| 72 </ul> |
| 73 <h3 id="ports">Ports</h3> |
| 74 <h4 id="new-filesystems">New Filesystems</h4> |
| 75 <ul class="small-gap"> |
| 76 <li><strong>Project:</strong> Expose new filesystems to <a class="reference inte
rnal" href="/native-client/devguide/coding/nacl_io.html"><em>nacl_io</em></a>.</
li> |
| 77 <li><strong>Brief explanation:</strong> nacl_io exposes filesystems like html5fs
and RAM disk, |
| 78 which can be mounted and then accessed through regular POSIX APIs. New types |
| 79 of filesystems could be exposed in a similar way, allowing developers to build |
| 80 apps that “just work” on the Web platform while using Web APIs. A fe
w ideas |
| 81 include connecting to: Google Drive, Github, Dropbox.</li> |
| 82 <li><strong>Expected results:</strong> A new filesystem is mountable using nacl_
io, is well |
| 83 tested, and used in a demo application.</li> |
| 84 <li><strong>Knowledge Prerequisite:</strong> C++.</li> |
| 85 <li><strong>Mentor:</strong> Sam Clegg.</li> |
| 86 </ul> |
| 87 <h4 id="open-source-porting">Open Source Porting</h4> |
| 88 <ul class="small-gap"> |
| 89 <li><strong>Project:</strong> Port substantial open source projects to work in n
aclports.</li> |
| 90 <li><strong>Brief explanation:</strong> naclports contains a large collection of
open source |
| 91 projects that properly compile and run on the PNaCl platform. This project |
| 92 involves adding new useful projects to naclports, and upstreaming any patches |
| 93 to the original project: running on PNaCl effective involves porting to a new |
| 94 architecture and operating system. Project ideas include: Gimp, Inkscape, Gtk.</
li> |
| 95 <li><strong>Expected results:</strong> New open source projects are usable from
naclports.</li> |
| 96 <li><strong>Knowledge Prerequisite:</strong> C/C++.</li> |
| 97 <li><strong>Mentor:</strong> Brad Nelson.</li> |
| 98 </ul> |
| 99 <h3 id="languages">Languages</h3> |
| 100 <p>PNaCl already has support for C and C++, and virtual machines such as |
| 101 JavaScript, Lua, Python and Ruby. We’d like to support more languages, eit
her by |
| 102 having these languages target LLVM bitcode or by making sure that the language |
| 103 virtual machine’s APIs work well on the Web platform.</p> |
| 104 <h4 id="rust">Rust</h4> |
| 105 <ul class="small-gap"> |
| 106 <li><strong>Project:</strong> Support the Rust programming languages.</li> |
| 107 <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 |
| 108 this project is to allow it to deliver PNaCl <code>.pexe</code> files.</li> |
| 109 <li><strong>Expected results:</strong> The Rust test suite passes within the bro
wser. How to |
| 110 use Rust to target PNaCl is well documented and easy to do.</li> |
| 111 <li><strong>Knowledge Prerequisite:</strong> Compilers, LLVM.</li> |
| 112 <li><strong>Mentor:</strong> Ben Smith.</li> |
| 113 </ul> |
| 114 <h4 id="haskell">Haskell</h4> |
| 115 <ul class="small-gap"> |
| 116 <li><strong>Project:</strong> Support the Haskell programming language.</li> |
| 117 <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 |
| 118 it to deliver PNaCl <code>.pexe</code> files. One interesting difficulty will be
to |
| 119 ensure that tail call optimization occurs properly in all targets.</li> |
| 120 <li><strong>Expected results:</strong> The Haskell test suite passes within the
browser. How to |
| 121 use Haskell to target PNaCl is well documented and easy to do.</li> |
| 122 <li><strong>Knowledge Prerequisite:</strong> Compilers, LLVM.</li> |
| 123 <li><strong>Mentor:</strong> Ben Smith.</li> |
| 124 </ul> |
| 125 <h4 id="julia">Julia</h4> |
| 126 <ul class="small-gap"> |
| 127 <li><strong>Project:</strong> Support the Julia programming language.</li> |
| 128 <li><strong>Brief explanation:</strong> <a class="reference external" href="http
://julialang.org">Julia</a> targets LLVM, but it does so through LLVM’s |
| 129 Just-in-Time compiler which PNaCl doens’t support. The aim of this project
is |
| 130 to allow it to deliver PNaCl <code>.pexe</code> files.</li> |
| 131 <li><strong>Expected results:</strong> The Julia test suite passes within the br
owser. How to |
| 132 use Julia to target PNaCl is well documented and easy to do.</li> |
| 133 <li><strong>Knowledge Prerequisite:</strong> Compilers, LLVM.</li> |
| 134 <li><strong>Mentor:</strong> Ben Smith.</li> |
| 135 </ul> |
| 136 <h4 id="scala">Scala</h4> |
| 137 <ul class="small-gap"> |
| 138 <li><strong>Project:</strong> Support the Scala programming language.</li> |
| 139 <li><strong>Brief explanation:</strong> The aim of this project is to allow <a c
lass="reference external" href="http://www.scala-lang.org">Scala</a> to deliver |
| 140 PNaCl <code>.pexe</code> files.</li> |
| 141 <li><strong>Expected results:</strong> The Scala test suite passes within the br
owser. How to |
| 142 use Scala to target PNaCl is well documented and easy to do.</li> |
| 143 <li><strong>Knowledge Prerequisite:</strong> Compilers.</li> |
| 144 <li><strong>Mentor:</strong> Ben Smith.</li> |
| 145 </ul> |
| 146 <h4 id="elm">Elm</h4> |
| 147 <ul class="small-gap"> |
| 148 <li><strong>Project:</strong> Support the Elm programming language.</li> |
| 149 <li><strong>Brief explanation:</strong> The aim of this project is to allow <a c
lass="reference external" href="http://elm-lang.org">Elm</a> to deliver |
| 150 PNaCl <code>.pexe</code> files.</li> |
| 151 <li><strong>Expected results:</strong> The Elm test suite passes within the brow
ser. How to use |
| 152 Elm to target PNaCl is well documented and easy to do.</li> |
| 153 <li><strong>Knowledge Prerequisite:</strong> Compilers.</li> |
| 154 <li><strong>Mentor:</strong> Jan Voung.</li> |
| 155 </ul> |
| 156 <h4 id="mono">Mono</h4> |
| 157 <ul class="small-gap"> |
| 158 <li><strong>Project:</strong> Support C# running inside Mono.</li> |
| 159 <li><strong>Brief explanation:</strong> C# is traditionally a Just-in-Time compi
led language, |
| 160 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 |
| 161 compiling ahead-of-time.</li> |
| 162 <li><strong>Expected results:</strong> The Mono test suite passes within the bro
wser. How to |
| 163 use Mono to target PNaCl is well documented and easy to do.</li> |
| 164 <li><strong>Knowledge Prerequisite:</strong> Compilers.</li> |
| 165 <li><strong>Mentor:</strong> Derek Schuff.</li> |
| 166 </ul> |
| 167 <h4 id="perl">Perl</h4> |
| 168 <ul class="small-gap"> |
| 169 <li><strong>Project:</strong> Support Perl.</li> |
| 170 <li><strong>Brief explanation:</strong> Port the Perl programming language and i
ts packages to |
| 171 the PNaCl platform.</li> |
| 172 <li><strong>Expected results:</strong> The Perl test suite passes within the bro
wser. How to |
| 173 use Perl to target PNaCl is well documented and easy to do.</li> |
| 174 <li><strong>Knowledge Prerequisite:</strong> C.</li> |
| 175 <li><strong>Mentor:</strong> Brad Nelson.</li> |
| 176 </ul> |
| 177 <h3 id="tcc">TCC</h3> |
| 178 <ul class="small-gap"> |
| 179 <li><strong>Project:</strong> Port Fabrice Ballard’s Tiny C Compiler _TCC
to NaCl and PNaCl.</li> |
| 180 <li><strong>Brief explanation:</strong> Port TCC to NaCl and enhance to follow N
aCl sandboxing |
| 181 rule, as well as emitting PNaCl bitcode. The same could be done with <a class="r
eference external" href="https://code.google.com/p/picoc">Pico |
| 182 C</a>.</li> |
| 183 <li><strong>Expected results:</strong> Compiler ported and code generator workin
g. Can run a |
| 184 small benchmark of your choice.</li> |
| 185 <li><strong>Knowledge Prerequisite:</strong> C, assembly, compilers.</li> |
| 186 </ul> |
| 187 <h3 id="llvm-and-pnacl">LLVM and PNaCl</h3> |
| 188 <p>PNaCl relies heavily on LLVM in two key areas:</p> |
| 189 <ul class="small-gap"> |
| 190 <li>On the developer’s machine, LLVM is used as a regular toolchain to par
se code, |
| 191 optimize it, and create a portable executable.</li> |
| 192 <li>On user devices, LLVM is installed as part of Chrome to translate a portable |
| 193 executable into a machine-specific sandboxed executable.</li> |
| 194 </ul> |
| 195 <p>Most of the contribution ideas around LLVM would occur in the upstream LLVM |
| 196 repository, and would improve LLVM for more than just PNaCl’s sake (though
PNaCl |
| 197 is of course benefiting from these improvements!). Some of these ideas would |
| 198 also apply to <a class="reference external" href="https://chromium.googlesource.
com/native_client/pnacl-subzero/+/master/README.rst">Subzero</a>, a small and fa
st translator from portable executable to |
| 199 machine-specific code.</p> |
| 200 <h4 id="sandboxing-optimizations">Sandboxing Optimizations</h4> |
| 201 <ul class="small-gap"> |
| 202 <li><strong>Project:</strong> Improved sandboxed code generation.</li> |
| 203 <li><strong>Brief explanation:</strong> PNaCl generates code that targets the Na
Cl sandbox, but |
| 204 this code generation isn’t always optimal and sometimes results in a |
| 205 performance lost of 10% to 25% compared to unsandboxed code. This project |
| 206 would require looking at the x86-32, x86-64, ARM and MIPS code being generated |
| 207 by LLVM or Subzero and figuring out how it can be improved to execute |
| 208 faster. As an example, one could write a compiler pass to figure out when |
| 209 doing a zero-extending <code>lea</code> on NaCl x86-64 would be useful (incremen
t and |
| 210 sandbox), or see if <code>%rbp</code> can be used more for loads/stores unrelate
d to |
| 211 the call frame.</li> |
| 212 <li><strong>Expected results:</strong> Sandboxed code runs measurably faster, an
d gets much |
| 213 closer to unsandboxed code performance. PNaCl has a fairly extensive |
| 214 performance test suite to measure these improvements.</li> |
| 215 <li><strong>Knowledge Prerequisite:</strong> Compilers, assembly.</li> |
| 216 <li><strong>Mentor:</strong> Jan Voung.</li> |
| 217 </ul> |
| 218 <h4 id="binary-size-reduction">Binary Size Reduction</h4> |
| 219 <ul class="small-gap"> |
| 220 <li><strong>Project:</strong> Reduce the size of binaries generated by LLVM.</li
> |
| 221 <li><strong>Brief explanation:</strong> This is generally useful for the LLVM pr
oject, but is |
| 222 especially important for PNaCl and Emscripten because we deliver code on the |
| 223 Web (transfer size and compile time matter!). This stands to drastically |
| 224 improve transfer time, and load time. Reduces the size of the PNaCl translator |
| 225 as well as user code, makes the generated portable executables smaller and |
| 226 translation size faster. Improve LLVM’s <code>mergefuncs</code> pass to reduce |
| 227 redundancy of code. Detect functions and data that aren’t used. Improve |
| 228 partial evaluation: can e.g. LLVM’s command-line parsing be mostly removed |
| 229 from the PNaCl translator? Potentially add a pass where a developer manually |
| 230 marks functions as unused, and have LLVM replace them with <code>abort</code> (t
his |
| 231 should propagate and mark other code as dead). This list could be created by |
| 232 using code coverage information.</li> |
| 233 <li><strong>Expected results:</strong> Portable executables in the PNaCl reposit
ory are |
| 234 measurably smaller and translate faster.</li> |
| 235 <li><strong>Knowledge Prerequisite:</strong> LLVM bitcode.</li> |
| 236 <li><strong>Mentor:</strong> JF Bastien.</li> |
| 237 </ul> |
| 238 <h4 id="vector-support">Vector Support</h4> |
| 239 <ul class="small-gap"> |
| 240 <li><strong>Project:</strong> Improve PNaCl SIMD support.</li> |
| 241 <li><strong>Brief explanation:</strong> PNaCl offers speed on the Web, and gener
ating good SIMD |
| 242 code allows developers to use the full capabilities of the device (better user |
| 243 experience, longer battery life). The goal of this project is to allow |
| 244 developers to use more hardware features in a portable manner by exposing |
| 245 portable SIMD primitives and using auto-vectorization. This could also mean |
| 246 making the architecture-specific intrinsics “just work” within PNaCl (lower |
| 247 them to equivalent architecture-independent intrinsics).</li> |
| 248 <li><strong>Expected results:</strong> Sample code and existing applications run
measurably |
| 249 faster by using portable SIMD and/or by auto-vectorizing.</li> |
| 250 <li><strong>Knowledge Prerequisite:</strong> Compilers, high-performance code tu
ning.</li> |
| 251 <li><strong>Mentor:</strong> JF Bastien.</li> |
| 252 </ul> |
| 253 <h4 id="atomics">Atomics</h4> |
| 254 <ul class="small-gap"> |
| 255 <li><strong>Project:</strong> Improve the performance of C++11 atomics.</li> |
| 256 <li><strong>Brief explanation:</strong> C++11 atomics allow programmers to shed
inline assembly |
| 257 and use language-level features to express high-performance code. This is |
| 258 great for portability, but atomics currently aren’t as fast as they could
be |
| 259 on all platforms. We had an intern work on this in the summer of 2014, see his |
| 260 LLVM developer conference presentation <a class="reference external" href="http:
//llvm.org/devmtg/2014-10/#talk10">Blowing up the atomic barrier</a>. This |
| 261 project would be a continuation of this work: improve LLVM’s code generati
on |
| 262 for atomics.</li> |
| 263 <li><strong>Expected results:</strong> Code using C++11 atomics runs measurably
faster on |
| 264 different architectures.</li> |
| 265 <li><strong>Knowledge Prerequisite:</strong> Compilers, memory models.</li> |
| 266 <li><strong>Mentor:</strong> JF Bastien.</li> |
| 267 </ul> |
| 268 <h4 id="security-enhanced-pnacl">Security-enhanced PNaCl</h4> |
| 269 <ul class="small-gap"> |
| 270 <li><strong>Project:</strong> Security in-depth for PNaCl.</li> |
| 271 <li><strong>Brief explanation:</strong> PNaCl brings native code to the Web, and
we want to |
| 272 improve the security of the platform as well as explore novel mitigations. |
| 273 This allows PNaCl to take better advantage of the hardware and operating |
| 274 system it’s running on and makes the platform even faster while keeping us
ers |
| 275 safe. It’s also useful for non-browser uses of PNaCl such as running untrusted |
| 276 code in the Cloud. A few areas to explore are: code randomization for LLVM and |
| 277 Subzero, fuzzing of the translator, code hiding at compilation time, and code |
| 278 tuning to the hardware and operating system the untrusted code is running on.</l
i> |
| 279 <li><strong>Expected results:</strong> The security design and implementation su
ccessfully pass |
| 280 a review with the Chrome security team.</li> |
| 281 <li><strong>Knowledge Prerequisite:</strong> Security.</li> |
| 282 <li><strong>Mentor:</strong> JF Bastien.</li> |
| 283 </ul> |
| 284 <h3 id="nacl">NaCl</h3> |
| 285 <h4 id="auto-sandboxing">Auto-Sandboxing</h4> |
| 286 <ul class="small-gap"> |
| 287 <li><strong>Project:</strong> Auto-sandboxing assembler.</li> |
| 288 <li><strong>Brief explanation:</strong> NaCl has a toolchain which can sandbox n
ative |
| 289 code. This toolchain can consume C/C++ as well as pre-sandboxed assembly, or |
| 290 assembly which uses special sandboxing macros. The goal of this project is to |
| 291 follow NaCl’s sandboxing requirements automatically which compiling assemb
ly |
| 292 files.</li> |
| 293 <li><strong>Expected results:</strong> Existing assembly code can be compiled to
a native |
| 294 executable that follows NaCl’s sandboxing rules.</li> |
| 295 <li><strong>Knowledge Prerequisite:</strong> Assemblers.</li> |
| 296 <li><strong>Mentor:</strong> Derek Schuff, Roland McGrath.</li> |
| 297 </ul> |
| 298 <h4 id="new-sandbox">New Sandbox</h4> |
| 299 <ul class="small-gap"> |
| 300 <li><strong>Project:</strong> Create a new software-fault isolation sandbox.</li
> |
| 301 <li><strong>Brief explanation:</strong> NaCl pioneered production-quality sandbo
xes based on |
| 302 software-fault isolation, and currently supports x86-32, x86-64, ARMv7’s A
RM, |
| 303 and MIPS. This project involves designing and implementing new sandboxes. Of |
| 304 particular interest are ARMv8’s aarch64 and Power8. This also requires |
| 305 implementing sandboxing in the compiler.</li> |
| 306 <li><strong>Expected results:</strong> The new sandbox’s design and implem
entation successfully |
| 307 pass a review with the Chrome security team. Existing NaCl code successfully |
| 308 runs in the new sandbox.</li> |
| 309 <li><strong>Knowledge Prerequisite:</strong> Security, low-level assembly, compi
lers, LLVM.</li> |
| 310 <li><strong>Mentor:</strong> David Sehr.</li> |
| 311 </ul> |
| 312 <h4 id="bit-sandbox">64-bit Sandbox</h4> |
| 313 <ul class="small-gap"> |
| 314 <li><strong>Project:</strong> Create a 64-bit sandbox.</li> |
| 315 <li><strong>Brief explanation:</strong> NaCl currently supports sandboxes where
pointers are |
| 316 32-bits. Some applications, both in-browser and not in-browser, would benefit |
| 317 from a larger address space. This project involves designing and implementing |
| 318 a model for 64-bit sandboxes on all architecture NaCl currently supports. This |
| 319 also requires supporting 64-bit pointers in PNaCl using the <code>le64</code> pl
atform, |
| 320 and updating the code generation for each platform.</li> |
| 321 <li><strong>Expected results:</strong> The new sandbox’s design and implem
entation successfully |
| 322 pass a review with the Chrome security team. Existing NaCl code successfully |
| 323 runs in the new sandbox.</li> |
| 324 <li><strong>Knowledge Prerequisite:</strong> Security, low-level assembly, compi
lers, LLVM.</li> |
| 325 <li><strong>Mentor:</strong> David Sehr.</li> |
| 326 </ul> |
| 327 </section> |
| 328 |
| 329 {{/partials.standard_nacl_article}} |
OLD | NEW |