aboutsummaryrefslogtreecommitdiffstats
path: root/docs/ORGANIZATION.md
blob: 690b7c59cf3a5847ec8ef386f76f848a40ea4685 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# Servo's directory structure:
* components
  * bluetooth
    * Implementation of the bluetooth thread.
  * bluetooth_traits
    * APIs to the bluetooth crate for crates that don't want to depend on the bluetooth crate for build speed reasons.
  * canvas
    * Implementation of painting threads for 2D and WebGL canvases.
  * canvas_traits
    * APIs to the canvas crate for crates that don't want to depend on the canvas crate for build speed reasons.
  * compositing
    * Integration with OS windowing/rendering and event loop.
  * constellation
    * Management of resources for a top-level browsing context (ie. tab).
  * devtools
    * In-process server to allow manipulating browser instances via a remote Firefox developer tools client.
  * devtools_traits
    * APIs to the devtools crate for crates that don't want to depend on the devtools crate for build speed reasons.
  * gfx
    * Draws the result of laying out a page, and sends the result to the compositor.
  * gfx_traits
    * APIs to the gfx crate for crates that don't want to depend on the gfx crate for build speed reasons.
  * layout
    * Converts page content into positioned, styled boxes and passes the result to the renderer.
  * layout_thread
    * Runs the threads for layout, communicates with the script thread, and calls into the layout crate to do the layout.
  * layout_traits
    * APIs to the layout crate for crates that don't want to depend on the layout crate for build speed reasons.
  * msg
    * Shared APIs for communicating between specific threads and crates.
  * net
    * Network protocol implementations, and state and resource management (caching, cookies, etc.).
  * net_traits
    * APIs to the net crate for crates that don't want to depend on the net crate for build speed reasons.
  * plugins
    * Syntax extensions, custom attributes, and lints.
  * profile
    * Memory and time profilers.
  * profile_traits
    * APIs to the profile crate for crates that don't want to depend on the profile crate for build speed reasons.
  * script
    * Implementation of the DOM (native Rust code and bindings to SpiderMonkey).
  * script_layout_interface
    * The API the script crate provides for the layout crate.
  * script_traits
    * APIs to the script crate for crates that don't want to depend on the script crate for build speed reasons.
  * selectors
    * CSS selector matching.
  * servo
    * Entry points for the servo application and libservo embedding library.
  * style
    * APIs for parsing CSS and interacting with stylesheets and styled elements.
  * style_traits
    * APIs to the style crate for crates that don't want to depend on the style crate for build speed reasons.
  * util
    * Assorted utility methods and types that are commonly used throughout the project.
  * webdriver_server
    * In-process server to allow manipulating browser instances via a WebDriver client.
  * webgpu
    * Implementation of threads for the WebGPU API.
* etc
  * Useful tools and scripts for developers.
* mach
  * A command-line tool to help with developer tasks.
* ports
  * winit
    * Embedding implementation for the `winit` windowing library.
* python
  * servo
    * Implementations of servo-specific mach commands.
  * tidy
    * Python package of code lints that are automatically run before merging changes.
* resources
  * Files used at run time. Need to be included somehow when distributing binary builds.
* support
  * android
    * Libraries that require special handling for building for Android platforms
  * rust-task_info
    * Library for obtaining information about memory usage for a process
* target
  * debug
    * Build artifacts generated by `./mach build --debug`.
  * doc
    * Documentation is generated here by the `rustdoc` tool when running `./mach doc`
  * release
    * Build artifacts generated by `./mach build --release`.
* tests
  * dromaeo
    * Harness for automatically running the Dromaeo testsuite.
  * heartbeats
    * Tools for periodic measurement of energy consumption.
  * html
    * Manual tests and experiments.
  * jquery
    * Harness for automatically running the jQuery testsuite.
  * power
    * Tools for measurement of power consumption.
  * unit
    * Unit tests using rustc’s built-in test harness.
  * wpt
    * W3C web-platform-tests and csswg-tests along with tools to run them and expected failures.

# Major dependencies
* <https://github.com/servo/rust-mozjs>, <https://github.com/servo/mozjs>: bindings to SpiderMonkey
* <https://github.com/hyperium/hyper>: an HTTP implementation
* <https://github.com/servo/html5ever>: an HTML5 parser
* <https://github.com/servo/ipc-channel>: an IPC implementation
* <https://github.com/image-rs/image>: image decoders
* <https://github.com/rust-windowing/winit>: cross-platform windowing and input
* <https://github.com/jrmuizel/raqote>: a pure Rust 2D graphics library
* <https://github.com/servo/rust-cssparser>: a CSS parser
* <https://github.com/housleyjk/ws-rs>: a WebSocket protocol implementation
* <https://github.com/servo/rust-url>: an implementation of the URL specification
* <https://github.com/servo/webrender>: a GPU renderer