mirror of
https://github.com/servo/servo
synced 2026-04-25 17:15:48 +02:00
Page:
Mozlando Oxidation
Pages
Adding a new WebIDL binding
Alternative Logo Proposals and Related Swag
Asynchronous WebAssembly compilation project
Austin Oxidation
Autogeneration of style structs
Basic SVG support project
Beginner's guide to rebasing and squashing
Benchmarking
Benchmarks
Bots
Browser Engine Research
Build Errors FAQ
Buildbot administration
Building for Android
Building for Magic Leap
Building for UWP
Building on ARM desktop Linux
Building
CI Services we use
CSS parse error reporting
CSSOM student project
Canvas rendering project
Cargo upgrade service project
Code rust concurrency
Code Review
Code of Conduct
Coding standards
Compiler upgrade recipes
Compositor Layer Design
Contributing
Control Servo using WebDriver
Creating and viewing WARC web archives in Servo
Creating new OpenSSL Windows binary distributions
Cross compiling from linux to mac
Crowbot
Css selector matching meeting 2013 07 19
DOM Design
DOM documentation
DOM missing pieces
Debugging JS web compat issues
Debugging and editing tools
Debugging
Design
Developer tools student project
Devtools CSS errors
Devtools plans
Devtools
Diagnosing SpiderMonkey JIT issues
Eric Atkinson visit 2013 09 10
Events and sundry
Expand HTTP request response monitoring
Fetch improvement project
Firefox Reality release notes
FirefoxReality build
Firewall setup for servo master1
Focus student project
Form validation student project
GSoC project brainstorming
Garbage collected DOM
Getting started with layout
GitHub Labels
Github & Critic PR handling 101
Github workflow
Glossary
Governance
Graphics toolkit integration
HTML parser improvement project
HTMLElement binding conversion
HTTP archive support project
HTTP library requirements
Hawaii Rooting
High priority content for layout
Highfive
HoloLens 2 test plan
Home
How to generate GStreamer binaries for CI
Image load conformance student project
Image maps project
Implement HTML charset parsing project
Implement ImageBitmap project
Implement missing WebAudio automation student project
Implement support for missing XMLHttpRequest APIs
Implement worker modules
Implementing a web standard (RGSoC)
Improve specification conformance of unicode bidi library
Incremental flow tree construction
Infrastructure
Integrate xml5ever
Intern project brainstorming
Intern projects
JS objects, wrappers, and cross origin concerns 2013 08 07
Layout 2020
Layout Overview
Layout resources
Layout revamp ideas
Leo meyerovich visit 2013 07 22
Linux sandboxing
London Oxidation
London Security
Meeting 2014 10 27
Meeting 2014 12 08
Meeting 2012 02 08
Meeting 2012 02 16
Meeting 2012 07 20
Meeting 2013 04 01
Meeting 2013 04 15
Meeting 2013 04 22
Meeting 2013 04 29
Meeting 2013 05 06
Meeting 2013 05 13
Meeting 2013 05 20
Meeting 2013 06 03
Meeting 2013 06 10
Meeting 2013 06 14
Meeting 2013 06 17
Meeting 2013 06 24
Meeting 2013 07 01
Meeting 2013 07 15
Meeting 2013 07 22
Meeting 2013 07 29
Meeting 2013 08 05
Meeting 2013 08 12
Meeting 2013 08 19
Meeting 2013 09 09
Meeting 2013 09 16
Meeting 2013 09 23
Meeting 2013 09 30
Meeting 2013 10 14
Meeting 2013 10 21
Meeting 2013 10 28
Meeting 2013 11 04
Meeting 2013 11 18
Meeting 2013 11 25
Meeting 2013 12 02
Meeting 2013 12 09
Meeting 2013 12 16
Meeting 2014 01 06
Meeting 2014 01 13
Meeting 2014 01 21
Meeting 2014 01 27
Meeting 2014 02 03
Meeting 2014 02 10
Meeting 2014 02 24
Meeting 2014 03 10
Meeting 2014 03 17
Meeting 2014 03 24
Meeting 2014 03 31
Meeting 2014 04 07
Meeting 2014 04 14
Meeting 2014 04 21
Meeting 2014 04 28
Meeting 2014 05 05
Meeting 2014 05 13
Meeting 2014 05 19
Meeting 2014 06 09
Meeting 2014 06 17
Meeting 2014 06 23
Meeting 2014 06 30
Meeting 2014 07 07
Meeting 2014 07 14
Meeting 2014 07 21
Meeting 2014 07 29
Meeting 2014 08 04
Meeting 2014 08 11
Meeting 2014 08 12
Meeting 2014 08 18
Meeting 2014 08 25
Meeting 2014 09 08
Meeting 2014 09 15
Meeting 2014 09 22
Meeting 2014 09 29
Meeting 2014 10 06
Meeting 2014 10 13
Meeting 2014 10 20
Meeting 2014 11 10
Meeting 2014 11 17
Meeting 2014 11 24
Meeting 2014 12 15
Meeting 2015 01 05
Meeting 2015 01 12
Meeting 2015 01 26
Meeting 2015 02 09
Meeting 2015 02 23
Meeting 2015 03 02
Meeting 2015 03 16
Meeting 2015 03 30
Meeting 2015 04 06
Meeting 2015 04 13
Meeting 2015 04 27
Meeting 2015 05 04
Meeting 2015 05 11
Meeting 2015 05 18
Meeting 2015 06 01
Meeting 2015 06 08
Meeting 2015 06 15
Meeting 2015 07 06
Meeting 2015 07 13
Meeting 2015 07 27
Meeting 2015 08 10
Meeting 2015 08 17
Meeting 2015 08 24
Meeting 2015 08 31
Meeting 2015 09 14
Meeting 2015 09 21
Meeting 2015 09 28
Meeting 2015 10 05
Meeting 2015 10 12
Meeting 2015 10 19
Meeting 2015 10 26
Meeting 2015 11 02
Meeting 2015 11 09
Meeting 2015 11 16
Meeting 2015 11 30
Meeting 2016 01 04
Meeting 2016 01 11
Meeting 2016 01 25
Meeting 2016 02 01
Meeting 2016 02 08
Meeting 2016 02 22
Meeting 2016 03 07
Meeting 2016 03 21
Meeting Devtools Servo 2
Meetings
Microdata project
Minutes Hackathon 2012 03 27
Missing DOM features project
More ServiceWorker support project
More developer tools student project
Mozlandia Automation
Mozlandia B2S
Mozlandia JS
Mozlandia Rust In Gecko
Mozlandia WPT
Mozlandia gfx
Mozlando Devtools Servo
Mozlando Oxidation
Mozlando SM Servo
Mozlando Servo Bluetooth
Mozlando Servo MagicDOM
Mozlando Servo SMStrings
Mutation observer project
Mutation testing project
NCSU student projects
Network security project
Off main thread HTML parsing project
Offscreen canvas improvements project
Offscreen canvas project
Orlando Oxidation 2018
Oxidation 2015 11 05
Persistent sessions student project
Preparing ARM libraries for CI
Priority of CSS properties
Priority of DOM implementation
Priority of dom bindings
Private browsing student project
Profiling
Project proposal deadlines
Prototype JS form controls student project
Prototype ways of splitting the script crate
Publishing a new ANGLE NuGet version
Publishing a new app store release
Push vs Pull for caching
Random web content project
Refactor GLES2 student project
Refactor bluetooth support student project
Remaining work
Removing push notifications from IRC hooks
Replace C libraries student project
Report new contributors project
Representation of computed style
Research
Reviewer
Roadmap
Running Web Platform Tests on Servo
Rust HTML parser
Rust SpiderMonkey debugger API
Rust cssparser code walk 2013 08 02
SaltStack Administration
San Francisco Oxidation
Servo Benchmarking Report (December 2024)
Servo Benchmarking Report (November 2024)
Servo Benchmarking Report (October 2024)
Servo Layout Engines Report
Servo and SpiderMonkey Report
Servo for Gecko Developers
Specification Links
SpiderMonkey related tasks
SpiderMonkey infodump
SpiderMonkey upgrade details
Storage student project
Streaming webassembly student project
Strings
Student project brainstorm
Student projects
Styling overview
Stylo hacking guide
Summer of Code 2014: Implement XMLHttpRequest
Summer of Code 2016: Fetch API
Summer of Code 2016: File support
Summer of Code 2016: ServiceWorker infrastructure
Summer of Code projects
Summit meeting 2013 09 09
Support WebDriver based tests project
Syncing web platform tests (WPT)
TaskCluster
Testing
Tools
Tracking intermittent failures over time project
Transcription Notes from Servo Architecture talk in Suwon
Transcription notes from rust patterns talk in suwon
Transcription parallelism
Transcription rust concurrency
Transcription rust runtime
Transription layout and acid2
Trinity College Dublin student projects
UPenn student projects
Updating the Rust compiler used by Servo
Upgrading non taskcluster linux CI machines
Upgrading the UWP gstreamer binaries
Upgrading the windows LLVM binaries
Upgrading wptrunner
Using DOM types
Using Rust Spidermonkey Prototype
Using WebWorker Prototype
Version 0.1
Videos and presentations
WebAudio JS interfaces student project
WebAudio nodes student project
WebCompatBug
WebSocket student project
Webdriver student project
Webdriver tests student project
Webrender Overview
Whistler 2019 notes
Whistler Bugzilla
Whistler FFOS
Whistler GFX
Whistler Houdini1
Whistler Houdini2
Whistler Necko
Whistler Oxidation 2019
Work items for new contributors
Workweek COW DOM
Workweek alt js
Workweek android arm
Workweek boot 2 servo
Workweek compiler lints
Workweek displaylist
Workweek dogfooding
Workweek encoding
Workweek generated content
Workweek governance
Workweek graphics stack
Workweek graphics toolkit
Workweek incremental layout
Workweek js bindings status
Workweek layers
Workweek layers2
Workweek pixels
Workweek rasterization
Workweek reftests
Workweek roadmap
Workweek script crate
Workweek security
Workweek string interning
Workweek tables
Workweek writing modes
XML parser student project
infra triage notes
jQuery status
webxr.today support
Clone
5
Mozlando Oxidation
Lars Bergstrom edited this page 2015-12-10 14:57:00 -05:00
Table of Contents
- Individual project status
- Platform support status - where are we at now? What blockers remain?
- Rust 1.5 stable just hit!
- jemalloc (fine to redirect)
- work remaining for try builds
- status for each tier 1 platform
- Servo style system on stable Rust
- Code / optimize / debug workflow
- How do we handle PGO build interactions (if in LLVM, can be added)
- How well does Rust work with the Gecko gdb/lldb/profiling (native and custom)?
- What about Windows?
- Diagnosing bugs reported "in the wild"
- Crash reporting (how do stack traces look; are symbols generated/stored properly)
- How do we make sure bugs are fixed in both engines?
- Vendoring
- m-c tree integration
- Build one huge crate that builds all the Gecko/Rust code into one world
- implicitly trust code review from Servo/Rust code / module policy concerns
- bisection
- Intent to Implement
- Issues for the rust team
Individual project status
MooV parser
- is in-tree, linux 64, inboud on Mac. Next are Windows and Android
- Help on Windows, Android and B2G would be good! Bottleneck is CI.
- 230k executions in telemetry
rust-url
- necko tests pass
- IDNA support currently being worked on (PR open)
- percent decoding of the hostname is quite different - until recently we didn't do it at all for hostnames, and now we only decode valid hostname characters (bug 412457)
- needed to make rust-url accept other schemes, such as resource:// in order to be able to run the browser, since some schemes also go through the parser (PR pending)
- Have not yet done a full 'try' run, which should flush remaining issues
- Did the build using cargo; still waiting for the rest of the build system integration
What about BMP decoder? (bholley)
- nnethercote just rewrote in C++, but at least with a big test suite
- Isn't the MP4 parser dangerous?
- Have both of them in-tree, run both for now. So still fixing stagefright security problems.
Platform support status - where are we at now? What blockers remain?
Rust 1.5 stable just hit!
- Gives us multi-file crates,
- Dependency generation for incremental builds.
jemalloc (fine to redirect)
- Can now redirect the Rust code to use the standard symbols in Gecko. nfroyd!
work remaining for try builds
- rpath/origin support to avoid LD_LIBRARY_PATH in try
- Official rust binaries don't set LD_LIBRARY_PATH; we build a custom snapshot for the try servers
status for each tier 1 platform
- Rust supports all tier 1 platforms; just need our build system integrations in space there (including OSX10.6, Linux64; Windows, Android, B2G need help. Just have to add more libstds)
- For some platforms like Android that just involves adding new targets to the build system and putting the additional libraries in place. Any volunteers? nfroyd!
Servo style system on stable Rust
- How much work would it take to make just the style system build on stable Rust (not require unstable nightly features)?
- pcwalton: Ms2ger has done work to move us off of non-necessary unstable features. Do you know how much unstable stuff layout is using?
- Ms2ger: Most things in the layout crate could be removed.
- Manishearth: I did an audit (https://gist.github.com/Manishearth/967bc78db5c751c38d03#layout, many of these have stabilized since) a few months ago. Most of the unstable features are left over from pre-1.0 code and we just haven't bothered changing them. Ignoring plugins, it's mostly easy. Plugins could be replaced with codegen.
- pcwalton: Do we even use any plugins in layout?
- (discussion to continue offline)
Code / optimize / debug workflow
How do we handle PGO build interactions (if in LLVM, can be added)
- We do PGO on Win (using MSVC) and Linux (GCC).
- I don't know what it means to do this. We use LLVM codegen across the board. As long as you treat us like other native libraries it should work out.
- The Rust code may not get the full benefit of PGO but it shouldn't cause problems. We currently compile some third-party code like ICU without PGO.
- LLVM has PGO support but we haven't done the legwork to use it.
- PGO is useful for devirtualization which isn't as important in Rust.
- It can also change optimizations based on hot vs. cold paths.
- bz: Once we have a style system in Rust, having PGO for the style system would be nice.
How well does Rust work with the Gecko gdb/lldb/profiling (native and custom)?
- Whatever LLVM supports, we support. I haven't seen any problems with standard tools.
- rr works with Servo.
What about Windows?
- A lot of the Windows stuff is based on LLVM, whose PDB support is relatively immature. We're keeping up to date with LLVM to benefit from new improvements.
- Currently can't inspect local variables; sometimes stack traces are weird.
- vlad: Maybe use the new stuff from MS?
- That uses the Clang front-end but uses MSVC++ for codegen; we can't use that for Rust.
- There are caveats. We emit DWARF and masquerade as C++. The fidelity is low. There are person-years of work to get full mature support.
- But it's good enough in practice for e.g. debugging Servo.
- We should validate all this; not just debugging but also profiling, crash reporting.
- If there are specific areas that need fixing, ask management for resources to do it.
- Rust team's priority right now is developer ergonomics and tooling.
Diagnosing bugs reported "in the wild"
Crash reporting (how do stack traces look; are symbols generated/stored properly)
- We got a reasonable stack trace from a crash report in a test run.
- How do we test the full workflow of crash reporter -> crash-stats.mozilla.com?
- bz: Introduce a crash behind a pref in nightly :-)
How do we make sure bugs are fixed in both engines?
- upstream repo for create; changes land there first?
- Once we have real users, we have less flexibility to change things without regard for impact on them.
- This impacts code like rust-url or Servo layout code that's shared between Gecko and Servo (or other Rust projects)
- We have this problem with a lot of third-party code used in mozilla-central.
Vendoring
- ted: We have a mandatory policy to vendor everything. It makes our life easier in some ways, in others harder.
- Servo uses cargo rather than vendoring things.
- Maybe we can have a "cargo vendor" tool or similar that integrates with cargo to sync in-tree copies with upstream repos.
- Or a more general (not Rust-specific) tool for syncing/diffing m-c directories against their upstream sources.
- Servo has a mach command to do two-way sync between our vendored web-platform-tests and upstream.
- bholley: we need better tooling in general for getting fixes in deeply nested dependencies deployed to downstream code.
- Instead of one repo per crate, we could have one repo with many crates, if that helps.
- acrichto: Idiomatic Rust practice is the opposite of "vendor everything." It's much easier if you can find ways to work the Rust ecosystem way.
- ted: I understand that but I don't think we're going to go all the way there. There may be somewhere halfway.
- gps: People really want bi-directional multi-vcs multi-repository "syncing"
- Rust, Servo, media, ICU, WebRTC, web-platform-tests, /devtools, /browser, ....
- Quilt/MQ like local patches
- gps: devs can pull from crates.io. builders absolutely cannot hit crates.io.
- ms2ger: We want this for devs' local builds too so they don't need to be connected after downloading/cloning m-c.
m-c tree integration
Build one huge crate that builds all the Gecko/Rust code into one world
- Not sure on the compilation model; need to clean it up a test rust-url example set of patches
implicitly trust code review from Servo/Rust code / module policy concerns
- Common to 3rd party code. Rubber-stamp review? e.g., libjpeg... rely on push to try?
- Expect responsive upstream for servo code
bisection
- simonsapin: Should we import commit history?
- gps: There are bots on FFOS that do automated commits
- It periodically pulls from upstream, and lands the new revision if it passes tests. So every few hours it's updated to the latest upstream
- ted: chromium does this, too via trybots
- gps: Can't just pull the full commit histroy because it might not be commit-level bisectable. Can roll upstream pushes into commits.
- Both Servo and mozilla-central are "push-level" bisectable but not commit-level. We try, but no automation enforcing that intermediate commits build.
Intent to Implement
- bz: Once we have Servo style code in Gecko we need to have process like "Intent to Ship"
Issues for the rust team
Rust has integer overflow checking in debug builds, disabled in optimized builds. Is there any static proof of no overflow?
- No.
- In media we'd like overflow checking enabled all the time.
- Integer math in media is so fast compared to the overall video decoding process, we care much more about correctness than performance.
- You can enable this in optimized builds with a compiler flag.
- Would like to do it at the crate level
- In Rust, even if you get an overflow, it's usually less serious than C++ because it can't cause buffer overrun/underrun or similar safety issues.
- Array bounds checking is always enabled (in debug and release builds).
- Some feedback that rustc's error messages are not good enough.
- steveklabnik: Just recently the @RustLang twitter got two simultaneous messages saying "best error mesages ever!!!" and "terrible error messages! :("
- We'd love specific feedback on any bad error messages. File issues. CC Niko and Manish
Compile times.
- There are lots of tweaks you can do; we're always working on improving the compiler.
- Biggest improvement will be incremental compilation. Lots of active work going on but it'll take a long time (several months) to be landed.
- Our measurements show a steady improvement in compile speed over time, but there may be bad cases still.
- If you have crates with especially bad compile time, send them to us to profile.
- You can improve things by splitting into crates.
- But then you don't get inlining across them (except with functions explicitly marked #[inline])
- Also, your functions are currently round-robined / otherwise arbitrarily divided, so what does get inlined (if it's not #[inline]) can be unpredictable.)
- Servo team feels this pain a lot since we have some very very big crates that take minutes to compile, every time they change.
- incremental builds: expect results maybe by summer 2016
New rust toolchain every 6 weeks?
- 150MB. 400MB uncompressed.
- Not good for places w/o reliable internet.
- There's some discussion about recycling (C++) build artifacts for Gecko, so e.g. frontend developers can build JS changes without needing a C++ compiler.
- Could leverage this for Rust too.
- Of course you'd still need to build X megabytes of pre-built binaries.
- At the beginning, we have little Rust code and frequent changes to the Rust toolchain, so faster to download the build artifacts.
- Later, maybe we'll have more Rust code and more stable toolchain, so trade-off may change.
- But we don't want to force upstream projects (e.g. Servo) to not track the latest Rust
- At this point, benefit of upgrading is usually to get perf improvements. Feature-wise we could be happy with stable Rust.
- Better to download Rust as source?
- No, can add hours to initial build time.
- We can just fedex a DVD with all the code every 6 weeks to contributors on slow networks.
##How long can we keep Rust as an optional dependency?
- Right now it's opt-in; eventually could be opt-out; at some point we'll have code that is Rust-only with no C++ fallback.
- We don't want to ship two URL parsers forever (especially if one is untested and they are diverging)
- This is a policy decision for the Build Config module owner
- Could download partial updates for rustc
- diff between releases currently likely to be quite large, possibly no improvement