Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(297)

Side by Side Diff: native_client_sdk/doc_generated/reference/ideas.html

Issue 909383002: NaCl docs: add project ideas (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « native_client_sdk/doc_generated/faq.html ('k') | native_client_sdk/doc_generated/sitemap.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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&#8217;t meant to constrain contributions! If you have ideas that are n&#8217;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&#8217;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 &#8220;just work&#8221; 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&#8217;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&#8217;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&#8217;s
129 Just-in-Time compiler which PNaCl doens&#8217;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&#8217;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&#8217;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&#8217;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&#8217;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&#8217;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&#8217;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&#8217;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&#8217;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&#8217;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&#8217;s A RM,
303 and MIPS. This project involves designing and implementing new sandboxes. Of
304 particular interest are ARMv8&#8217;s aarch64 and Power8. This also requires
305 implementing sandboxing in the compiler.</li>
306 <li><strong>Expected results:</strong> The new sandbox&#8217;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&#8217;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}}
OLDNEW
« no previous file with comments | « native_client_sdk/doc_generated/faq.html ('k') | native_client_sdk/doc_generated/sitemap.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698