class: center, middle ###Contributing to #Servo ### 2016/8/27, TW Code Sprint ### Shing Lyu ??? top, middle, bottom left, center, right --- name: toc ###Agenda 1. What is Servo 1. Workflow 1. Build & Test 1. Code Organization 1. More Documentations 1. Project Ideas ??? This is a template --- ###what is Servo * A new browser engine * Written in Rust * Focus on performance, parallelism, and security --- ### Workflow ![contribution_flow](data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4wLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvUFItU1ZHLTIwMDEwNzE5L0RURC9zdmcxMC5kdGQiPgo8c3ZnIHdpZHRoPSI0N2NtIiBoZWlnaHQ9IjI0Y20iIHZpZXdCb3g9IjYzIDE4IDkzNyA0NzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogIDxnPgogICAgPHJlY3Qgc3R5bGU9ImZpbGw6IG5vbmU7IGZpbGwtb3BhY2l0eTowOyBzdHJva2Utd2lkdGg6IDI7IHN0cm9rZTogI2ZmZmZmZiIgeD0iMzAwLjUzNCIgeT0iNzUuMjg0MSIgd2lkdGg9IjEzOS41NSIgaGVpZ2h0PSI1MC4yMjIyIi8+CiAgICA8dGV4dCBmb250LXNpemU9IjIyLjU3NzgiIHN0eWxlPSJmaWxsOiAjZmZmZmZmO3RleHQtYW5jaG9yOm1pZGRsZTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbCIgeD0iMzcwLjMwOSIgeT0iMTA3LjI4NCI+CiAgICAgIDx0c3BhbiB4PSIzNzAuMzA5IiB5PSIxMDcuMjg0Ij5GaW5kIGEgYnVnPC90c3Bhbj4KICAgIDwvdGV4dD4KICA8L2c+CiAgPGc+CiAgICA8cmVjdCBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlOiAjZmZmZmZmIiB4PSIyODguNjg0IiB5PSIxNTkuNjg1IiB3aWR0aD0iMTYzLjI1IiBoZWlnaHQ9IjUwLjIyMjIiLz4KICAgIDx0ZXh0IGZvbnQtc2l6ZT0iMjIuNTc3OCIgc3R5bGU9ImZpbGw6ICNmZmZmZmY7dGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsIiB4PSIzNzAuMzA5IiB5PSIxOTEuNjg1Ij4KICAgICAgPHRzcGFuIHg9IjM3MC4zMDkiIHk9IjE5MS42ODUiPkZvcmsgJmFtcDsgY2xvbmU8L3RzcGFuPgogICAgPC90ZXh0PgogIDwvZz4KICA8Zz4KICAgIDxyZWN0IHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAyOyBzdHJva2U6ICNmZmZmZmYiIHg9IjI5OC41ODUiIHk9IjI0NC4wODciIHdpZHRoPSIxNDMuNDUiIGhlaWdodD0iNTAuMjIyMiIvPgogICAgPHRleHQgZm9udC1zaXplPSIyMi41Nzc4IiBzdHlsZT0iZmlsbDogI2ZmZmZmZjt0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWwiIHg9IjM3MC4zMSIgeT0iMjc2LjA4NyI+CiAgICAgIDx0c3BhbiB4PSIzNzAuMzEiIHk9IjI3Ni4wODciPldyaXRlIGNvZGU8L3RzcGFuPgogICAgPC90ZXh0PgogIDwvZz4KICA8Zz4KICAgIDxyZWN0IHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAyOyBzdHJva2U6ICNmZmZmZmYiIHg9IjI1MS4wMSIgeT0iMzI4LjQ4NyIgd2lkdGg9IjIzOC42IiBoZWlnaHQ9IjUwLjIyMjIiLz4KICAgIDx0ZXh0IGZvbnQtc2l6ZT0iMjIuNTc3OCIgc3R5bGU9ImZpbGw6ICNmZmZmZmY7dGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsIiB4PSIzNzAuMzEiIHk9IjM2MC40ODciPgogICAgICA8dHNwYW4geD0iMzcwLjMxIiB5PSIzNjAuNDg3Ij5DcmVhdGUgcHVsbCByZXF1ZXN0PC90c3Bhbj4KICAgIDwvdGV4dD4KICA8L2c+CiAgPGc+CiAgICA8cmVjdCBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlOiAjZmZmZmZmIiB4PSIyNjkuNzYiIHk9IjQxMi44ODkiIHdpZHRoPSIyMDEuMSIgaGVpZ2h0PSI1MC4yMjIyIi8+CiAgICA8dGV4dCBmb250LXNpemU9IjIyLjU3NzgiIHN0eWxlPSJmaWxsOiAjZmZmZmZmO3RleHQtYW5jaG9yOm1pZGRsZTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbCIgeD0iMzcwLjMxIiB5PSI0NDQuODg5Ij4KICAgICAgPHRzcGFuIHg9IjM3MC4zMSIgeT0iNDQ0Ljg4OSI+QXNzaWduIHJldmlld2VyPC90c3Bhbj4KICAgIDwvdGV4dD4KICA8L2c+CiAgPGc+CiAgICA8cmVjdCBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlOiAjZmZmZmZmIiB4PSI2MTQuNDI2IiB5PSI3NS4yODQxIiB3aWR0aD0iMTAyLjciIGhlaWdodD0iNTAuMjIyMiIvPgogICAgPHRleHQgZm9udC1zaXplPSIyMi41Nzc4IiBzdHlsZT0iZmlsbDogI2ZmZmZmZjt0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWwiIHg9IjY2NS43NzYiIHk9IjEwNy4yODQiPgogICAgICA8dHNwYW4geD0iNjY1Ljc3NiIgeT0iMTA3LjI4NCI+UmV2aWV3PC90c3Bhbj4KICAgIDwvdGV4dD4KICA8L2c+CiAgPGc+CiAgICA8cmVjdCBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlOiAjZmZmZmZmIiB4PSI2MDMuMjc2IiB5PSIyNDAuMzg5IiB3aWR0aD0iMTI1IiBoZWlnaHQ9IjUwLjIyMjIiLz4KICAgIDx0ZXh0IGZvbnQtc2l6ZT0iMjIuNTc3OCIgc3R5bGU9ImZpbGw6ICNmZmZmZmY7dGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsIiB4PSI2NjUuNzc2IiB5PSIyNzIuMzg5Ij4KICAgICAgPHRzcGFuIHg9IjY2NS43NzYiIHk9IjI3Mi4zODkiPkF1dG8gdGVzdDwvdHNwYW4+CiAgICA8L3RleHQ+CiAgPC9nPgogIDxnPgogICAgPHJlY3Qgc3R5bGU9ImZpbGw6IG5vbmU7IGZpbGwtb3BhY2l0eTowOyBzdHJva2Utd2lkdGg6IDI7IHN0cm9rZTogI2ZmZmZmZiIgeD0iNjAwLjU1MSIgeT0iNDEyLjg4OSIgd2lkdGg9IjEzMC40NSIgaGVpZ2h0PSI1MC4yMjIyIi8+CiAgICA8dGV4dCBmb250LXNpemU9IjIyLjU3NzgiIHN0eWxlPSJmaWxsOiAjZmZmZmZmO3RleHQtYW5jaG9yOm1pZGRsZTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbCIgeD0iNjY1Ljc3NiIgeT0iNDQ0Ljg4OSI+CiAgICAgIDx0c3BhbiB4PSI2NjUuNzc2IiB5PSI0NDQuODg5Ij5BdXRvIGxhbmQ8L3RzcGFuPgogICAgPC90ZXh0PgogIDwvZz4KICA8Zz4KICAgIDxwb2x5Z29uIHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAyOyBzdHJva2U6ICNmZmZmZmYiIHBvaW50cz0iNjY1Ljc3NiwzMTMuMzggNzY3Ljg2MywzNTIuMDQ2IDY2NS43NzYsMzkwLjcxMiA1NjMuNjg5LDM1Mi4wNDYgIi8+CiAgICA8dGV4dCBmb250LXNpemU9IjIyLjU3NzgiIHN0eWxlPSJmaWxsOiAjZmZmZmZmO3RleHQtYW5jaG9yOm1pZGRsZTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbCIgeD0iNjY1Ljc3NiIgeT0iMzU4LjkzNSI+CiAgICAgIDx0c3BhbiB4PSI2NjUuNzc2IiB5PSIzNTguOTM1Ij5wYXNzID88L3RzcGFuPgogICAgPC90ZXh0PgogIDwvZz4KICA8Zz4KICAgIDxlbGxpcHNlIHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAyOyBzdHJva2U6ICNmZmZmZmYiIGN4PSIxNTAuODgiIGN5PSIyNzIuNDQiIHJ4PSI3Mi44Nzk3IiByeT0iNDIuNDM5OCIvPgogICAgPHRleHQgZm9udC1zaXplPSIyMi41Nzc4IiBzdHlsZT0iZmlsbDogI2ZmZmZmZjt0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWwiIHg9IjE1MC44OCIgeT0iMjc5LjMyOSI+CiAgICAgIDx0c3BhbiB4PSIxNTAuODgiIHk9IjI3OS4zMjkiPllvdTwvdHNwYW4+CiAgICA8L3RleHQ+CiAgPC9nPgogIDxnPgogICAgPGxpbmUgc3R5bGU9ImZpbGw6IG5vbmU7IGZpbGwtb3BhY2l0eTowOyBzdHJva2Utd2lkdGg6IDM7IHN0cm9rZTogI2ZmZmZmZiIgeDE9IjM3MC4zMDkiIHkxPSIxMjUuNTA2IiB4Mj0iMzcwLjMwOSIgeTI9IjE1Mi45NzciLz4KICAgIDxwb2x5bGluZSBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMzsgc3Ryb2tlOiAjZmZmZmZmIiBwb2ludHM9IjM2NS4zMDksMTQ2LjMzMSAzNzAuMzA5LDE1Ni4zMzEgMzc1LjMwOSwxNDYuMzMxICIvPgogIDwvZz4KICA8Zz4KICAgIDxsaW5lIHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAzOyBzdHJva2U6ICNmZmZmZmYiIHgxPSIzNzAuMzA5IiB5MT0iMjA5LjkwOCIgeDI9IjM3MC4zMSIgeTI9IjIzNy4zNzkiLz4KICAgIDxwb2x5bGluZSBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMzsgc3Ryb2tlOiAjZmZmZmZmIiBwb2ludHM9IjM2NS4zMSwyMzAuNzMzIDM3MC4zMSwyNDAuNzMzIDM3NS4zMSwyMzAuNzMzICIvPgogIDwvZz4KICA8Zz4KICAgIDxsaW5lIHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAzOyBzdHJva2U6ICNmZmZmZmYiIHgxPSIzNzAuMzEiIHkxPSIyOTQuMzA5IiB4Mj0iMzcwLjMxIiB5Mj0iMzIxLjc3OSIvPgogICAgPHBvbHlsaW5lIHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAzOyBzdHJva2U6ICNmZmZmZmYiIHBvaW50cz0iMzY1LjMxLDMxNS4xMzMgMzcwLjMxLDMyNS4xMzMgMzc1LjMxLDMxNS4xMzMgIi8+CiAgPC9nPgogIDxnPgogICAgPGxpbmUgc3R5bGU9ImZpbGw6IG5vbmU7IGZpbGwtb3BhY2l0eTowOyBzdHJva2Utd2lkdGg6IDM7IHN0cm9rZTogI2ZmZmZmZiIgeDE9IjM3MC4zMSIgeTE9IjM3OC43MDkiIHgyPSIzNzAuMzEiIHkyPSI0MDYuMTgxIi8+CiAgICA8cG9seWxpbmUgc3R5bGU9ImZpbGw6IG5vbmU7IGZpbGwtb3BhY2l0eTowOyBzdHJva2Utd2lkdGg6IDM7IHN0cm9rZTogI2ZmZmZmZiIgcG9pbnRzPSIzNjUuMzEsMzk5LjUzNSAzNzAuMzEsNDA5LjUzNSAzNzUuMzEsMzk5LjUzNSAiLz4KICA8L2c+CiAgPGc+CiAgICA8cG9seWdvbiBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlOiAjZmZmZmZmIiBwb2ludHM9IjY2NS43NzYsMTQyLjgzMiA3NDQuMTExLDE4MiA2NjUuNzc2LDIyMS4xNjggNTg3LjQ0MSwxODIgIi8+CiAgICA8dGV4dCBmb250LXNpemU9IjIyLjU3NzgiIHN0eWxlPSJmaWxsOiAjZmZmZmZmO3RleHQtYW5jaG9yOm1pZGRsZTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbCIgeD0iNjY1Ljc3NiIgeT0iMTg4Ljg4OSI+CiAgICAgIDx0c3BhbiB4PSI2NjUuNzc2IiB5PSIxODguODg5Ij5PSyA/PC90c3Bhbj4KICAgIDwvdGV4dD4KICA8L2c+CiAgPGc+CiAgICA8bGluZSBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMzsgc3Ryb2tlOiAjZmZmZmZmIiB4MT0iNjY1Ljc3NiIgeTE9IjEyNS41MDYiIHgyPSI2NjUuNzc2IiB5Mj0iMTM2LjEyNCIvPgogICAgPHBvbHlsaW5lIHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAzOyBzdHJva2U6ICNmZmZmZmYiIHBvaW50cz0iNjYwLjc3NiwxMjkuNDc4IDY2NS43NzYsMTM5LjQ3OCA2NzAuNzc2LDEyOS40NzggIi8+CiAgPC9nPgogIDxnPgogICAgPGxpbmUgc3R5bGU9ImZpbGw6IG5vbmU7IGZpbGwtb3BhY2l0eTowOyBzdHJva2Utd2lkdGg6IDM7IHN0cm9rZTogI2ZmZmZmZiIgeDE9IjY2NS43NzYiIHkxPSIyMjEuMTY4IiB4Mj0iNjY1Ljc3NiIgeTI9IjIzMy42ODEiLz4KICAgIDxwb2x5bGluZSBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMzsgc3Ryb2tlOiAjZmZmZmZmIiBwb2ludHM9IjY2MC43NzYsMjI3LjAzNSA2NjUuNzc2LDIzNy4wMzUgNjcwLjc3NiwyMjcuMDM1ICIvPgogIDwvZz4KICA8Zz4KICAgIDxsaW5lIHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAzOyBzdHJva2U6ICNmZmZmZmYiIHgxPSI2NjUuNzc2IiB5MT0iMjkwLjYxMSIgeDI9IjY2NS43NzYiIHkyPSIzMDYuNjcyIi8+CiAgICA8cG9seWxpbmUgc3R5bGU9ImZpbGw6IG5vbmU7IGZpbGwtb3BhY2l0eTowOyBzdHJva2Utd2lkdGg6IDM7IHN0cm9rZTogI2ZmZmZmZiIgcG9pbnRzPSI2NjAuNzc2LDMwMC4wMjYgNjY1Ljc3NiwzMTAuMDI2IDY3MC43NzYsMzAwLjAyNiAiLz4KICA8L2c+CiAgPGc+CiAgICA8cmVjdCBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlOiAjZmZmZmZmIiB4PSI1MDkuNTQ4IiB5PSI3NS4yODQxIiB3aWR0aD0iOTUuOTUiIGhlaWdodD0iNTAuMjIyMiIvPgogICAgPHRleHQgZm9udC1zaXplPSIyMi41Nzc4IiBzdHlsZT0iZmlsbDogI2ZmZmZmZjt0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWwiIHg9IjU1Ny41MjMiIHk9IjEwNy4yODQiPgogICAgICA8dHNwYW4geD0iNTU3LjUyMyIgeT0iMTA3LjI4NCI+UmV2aXNlPC90c3Bhbj4KICAgIDwvdGV4dD4KICA8L2c+CiAgPGc+CiAgICA8cG9seWxpbmUgc3R5bGU9ImZpbGw6IG5vbmU7IGZpbGwtb3BhY2l0eTowOyBzdHJva2Utd2lkdGg6IDI7IHN0cm9rZTogI2ZmZmZmZiIgcG9pbnRzPSI1ODcuNDQxLDE4MiA1ODcuNDQxLDE4Mi45NTcgNTU3LjUyMywxODIuOTU3IDU1Ny41MjMsMTI5Ljk3OCAiLz4KICAgIDxwb2x5bGluZSBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlOiAjZmZmZmZmIiBwb2ludHM9IjU2Mi41MjMsMTM3Ljc0MiA1NTcuNTIzLDEyNy43NDIgNTUyLjUyMywxMzcuNzQyICIvPgogIDwvZz4KICA8Zz4KICAgIDxwb2x5bGluZSBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlOiAjZmZmZmZmIiBwb2ludHM9IjU1Ny41MjMsNzUuMjg0MSA1NTcuNTIzLDU0LjI4NDEgNjQwLjEwMSw1NC4yODQxIDY0MC4xMDEsNzAuODEyICIvPgogICAgPHBvbHlsaW5lIHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAyOyBzdHJva2U6ICNmZmZmZmYiIHBvaW50cz0iNjM1LjEwMSw2My4wNDggNjQwLjEwMSw3My4wNDggNjQ1LjEwMSw2My4wNDggIi8+CiAgPC9nPgogIDxnPgogICAgPGVsbGlwc2Ugc3R5bGU9ImZpbGw6IG5vbmU7IGZpbGwtb3BhY2l0eTowOyBzdHJva2Utd2lkdGg6IDI7IHN0cm9rZTogI2ZmZmZmZiIgY3g9IjE1My44NzciIGN5PSI0MzYuMTU2IiByeD0iODguOTE5MSIgcnk9IjQ1Ljc2NTgiLz4KICAgIDx0ZXh0IGZvbnQtc2l6ZT0iMjIuNTc3OCIgc3R5bGU9ImZpbGw6ICNmZmZmZmY7dGV4dC1hbmNob3I6bWlkZGxlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsIiB4PSIxNTMuODc3IiB5PSI0MjguOTM0Ij4KICAgICAgPHRzcGFuIHg9IjE1My44NzciIHk9IjQyOC45MzQiPkhpZ2hmaXZlPC90c3Bhbj4KICAgICAgPHRzcGFuIHg9IjE1My44NzciIHk9IjQ1Ny4xNTYiPmJvdDwvdHNwYW4+CiAgICA8L3RleHQ+CiAgPC9nPgogIDxnPgogICAgPGVsbGlwc2Ugc3R5bGU9ImZpbGw6IG5vbmU7IGZpbGwtb3BhY2l0eTowOyBzdHJva2Utd2lkdGg6IDI7IHN0cm9rZTogI2ZmZmZmZiIgY3g9Ijg3OC4xNjciIGN5PSIxMDEuMzk1IiByeD0iNjkuMTU5IiByeT0iNDMuODk2MyIvPgogICAgPHRleHQgZm9udC1zaXplPSIyMi41Nzc4IiBzdHlsZT0iZmlsbDogI2ZmZmZmZjt0ZXh0LWFuY2hvcjptaWRkbGU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWwiIHg9Ijg3OC4xNjciIHk9IjEwOC4yODQiPgogICAgICA8dHNwYW4geD0iODc4LjE2NyIgeT0iMTA4LjI4NCI+UmV2aWV3ZXI8L3RzcGFuPgogICAgPC90ZXh0PgogIDwvZz4KICA8Zz4KICAgIDxlbGxpcHNlIHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAyOyBzdHJva2U6ICNmZmZmZmYiIGN4PSI5MDAuMDk3IiBjeT0iMzU2LjQyMyIgcng9Ijk5LjE0NzkiIHJ5PSI0OS41MzUxIi8+CiAgICA8dGV4dCBmb250LXNpemU9IjIyLjU3NzgiIHN0eWxlPSJmaWxsOiAjZmZmZmZmO3RleHQtYW5jaG9yOm1pZGRsZTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbCIgeD0iOTAwLjA5NyIgeT0iMzQ5LjIwMSI+CiAgICAgIDx0c3BhbiB4PSI5MDAuMDk3IiB5PSIzNDkuMjAxIj5Cb3JzLXNlcnZvPC90c3Bhbj4KICAgICAgPHRzcGFuIHg9IjkwMC4wOTciIHk9IjM3Ny40MjMiPmJvdDwvdHNwYW4+CiAgICA8L3RleHQ+CiAgPC9nPgogIDxnPgogICAgPHBvbHlsaW5lIHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAyOyBzdHJva2U6ICNmZmZmZmYiIHBvaW50cz0iNTYzLjY4OSwzNTIuMDQ2IDU2My42ODksMzUzIDUzMy41MzUsMzUzIDUzMy41MzUsMTI5Ljk3OCAiLz4KICAgIDxwb2x5bGluZSBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlOiAjZmZmZmZmIiBwb2ludHM9IjUzOC41MzUsMTM3Ljc0MiA1MzMuNTM1LDEyNy43NDIgNTI4LjUzNSwxMzcuNzQyICIvPgogIDwvZz4KICA8Zz4KICAgIDxsaW5lIHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAzOyBzdHJva2U6ICNmZmZmZmYiIHgxPSI2NjUuNzc2IiB5MT0iMzkwLjcxMiIgeDI9IjY2NS43NzYiIHkyPSI0MDYuMTgxIi8+CiAgICA8cG9seWxpbmUgc3R5bGU9ImZpbGw6IG5vbmU7IGZpbGwtb3BhY2l0eTowOyBzdHJva2Utd2lkdGg6IDM7IHN0cm9rZTogI2ZmZmZmZiIgcG9pbnRzPSI2NjAuNzc2LDM5OS41MzUgNjY1Ljc3Niw0MDkuNTM1IDY3MC43NzYsMzk5LjUzNSAiLz4KICA8L2c+CiAgPGc+CiAgICA8cGF0aCBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlLWRhc2hhcnJheTogNDsgc3Ryb2tlOiAjZmZmZmZmIiBkPSJNIDI5Ny41LDEwMy42OCBBIDI4Ny42MiwyODcuNjIgMCAwIDAgMjIzLjc1OSwyNzIuNDQiLz4KICAgIDxwb2x5bGluZSBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlOiAjZmZmZmZmIiBwb2ludHM9IjI5NS44MSwxMTIuNzQgMjk5LjAwNCwxMDIuMDI2IDI4OC41MTYsMTA1Ljg5OSAiLz4KICA8L2c+CiAgPGc+CiAgICA8cGF0aCBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlLWRhc2hhcnJheTogNDsgc3Ryb2tlOiAjZmZmZmZmIiBkPSJNIDIyMy43NTksMjcyLjQ0IEEgNTUuODA3OCw1NS44MDc4IDAgMCAwIDI0Ni45MjMsMzUxLjgwOSIvPgogICAgPHBvbHlsaW5lIHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAyOyBzdHJva2U6ICNmZmZmZmYiIHBvaW50cz0iMjM3Ljc5MywzNTMuOCAyNDguOTI3LDM1Mi43ODQgMjQxLjQzNCwzNDQuNDg2ICIvPgogIDwvZz4KICA8Zz4KICAgIDxwYXRoIHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAyOyBzdHJva2UtZGFzaGFycmF5OiA0OyBzdHJva2U6ICNmZmZmZmYiIGQ9Ik0gMjg1LjE5NiwxODcuNTkzIEEgMjA1Ljc1NiwyMDUuNzU2IDAgMCAwIDIyMy43NTksMjcyLjQ0Ii8+CiAgICA8cG9seWxpbmUgc3R5bGU9ImZpbGw6IG5vbmU7IGZpbGwtb3BhY2l0eTowOyBzdHJva2Utd2lkdGg6IDI7IHN0cm9rZTogI2ZmZmZmZiIgcG9pbnRzPSIyODIuMTQsMTk2LjI4MSAyODYuOTI0LDE4Ni4xNzYgMjc1Ljk3LDE4OC40MTIgIi8+CiAgPC9nPgogIDxnPgogICAgPHBhdGggc3R5bGU9ImZpbGw6IG5vbmU7IGZpbGwtb3BhY2l0eTowOyBzdHJva2Utd2lkdGg6IDI7IHN0cm9rZS1kYXNoYXJyYXk6IDQ7IHN0cm9rZTogI2ZmZmZmZiIgZD0iTSAyMjMuNzU5LDI3Mi40NCBBIDQ1LjA1ODcsNDUuMDU4NyAwIDAgMCAyOTYuMDg0LDI3Mi44ODYiLz4KICAgIDxwb2x5bGluZSBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlOiAjZmZmZmZmIiBwb2ludHM9IjI5Ni40OTksMjgyLjI1MSAyOTcuNDIzLDI3MS4xMDggMjg3Ljk1NSwyNzcuMDU0ICIvPgogIDwvZz4KICA8Zz4KICAgIDxsaW5lIHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAyOyBzdHJva2UtZGFzaGFycmF5OiA0OyBzdHJva2U6ICNmZmZmZmYiIHgxPSIyNDIuNzk2IiB5MT0iNDM2LjE1NiIgeDI9IjI2NS4yOTgiIHkyPSI0MzcuNjk1Ii8+CiAgICA8cG9seWxpbmUgc3R5bGU9ImZpbGw6IG5vbmU7IGZpbGwtb3BhY2l0eTowOyBzdHJva2Utd2lkdGg6IDI7IHN0cm9rZTogI2ZmZmZmZiIgcG9pbnRzPSIyNTcuMjExLDQ0Mi4xNTQgMjY3LjUyOSw0MzcuODQ3IDI1Ny44OTMsNDMyLjE3NyAiLz4KICA8L2c+CiAgPGc+CiAgICA8bGluZSBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlLWRhc2hhcnJheTogNDsgc3Ryb2tlOiAjZmZmZmZmIiB4MT0iODA5LjAwOCIgeTE9IjEwMS4zOTUiIHgyPSI3MjEuNTk4IiB5Mj0iMTAwLjQ0NCIvPgogICAgPHBvbHlsaW5lIHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAyOyBzdHJva2U6ICNmZmZmZmYiIHBvaW50cz0iNzI5LjQxNiw5NS41Mjg2IDcxOS4zNjIsMTAwLjQyIDcyOS4zMDcsMTA1LjUyOCAiLz4KICA8L2c+CiAgPGc+CiAgICA8cGF0aCBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlLWRhc2hhcnJheTogNDsgc3Ryb2tlOiAjZmZmZmZmIiBkPSJNIDgwMC45NDksMzU2LjQyMyBBIDEzOS4xNDMsMTM5LjE0MyAwIDAgMCA3MzIuMjM5LDI2Ny41NjgiLz4KICAgIDxwb2x5bGluZSBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlOiAjZmZmZmZmIiBwb2ludHM9Ijc0MS40NTUsMjY2LjUxNyA3MzAuMjc1LDI2Ni41MDMgNzM2Ljk3MSwyNzUuNDU2ICIvPgogIDwvZz4KICA8Zz4KICAgIDxwYXRoIHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAyOyBzdHJva2UtZGFzaGFycmF5OiA0OyBzdHJva2U6ICNmZmZmZmYiIGQ9Ik0gNzM1LjA0Niw0MzYuMDk3IEEgMTI2LjE3NSwxMjYuMTc1IDAgMCAwIDgwMC45NDksMzU2LjQyMyIvPgogICAgPHBvbHlsaW5lIHN0eWxlPSJmaWxsOiBub25lOyBmaWxsLW9wYWNpdHk6MDsgc3Ryb2tlLXdpZHRoOiAyOyBzdHJva2U6ICNmZmZmZmYiIHBvaW50cz0iNzQwLjExNSw0MjguNDI2IDczMy4wNDEsNDM3LjA4NCA3NDQuMjEyLDQzNy41NDggIi8+CiAgPC9nPgogIDxnPgogICAgPHBhdGggc3R5bGU9ImZpbGw6IG5vbmU7IGZpbGwtb3BhY2l0eTowOyBzdHJva2Utd2lkdGg6IDI7IHN0cm9rZS1kYXNoYXJyYXk6IDQ7IHN0cm9rZTogI2ZmZmZmZiIgZD0iTSA1MzAuMzQzLDcyLjE1MzQgQSAxODcuOTg0LDE4Ny45ODQgMCAwIDAgMjIzLjc1OSwyNzIuNDQiLz4KICAgIDxwb2x5bGluZSBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlOiAjZmZmZmZmIiBwb2ludHM9IjUyMS4zNTksNzAuMTQxMSA1MzEuOTU4LDczLjY5OTUgNTI4LjQ0NSw2My4wODUzICIvPgogIDwvZz4KICA8Zz4KICAgIDxwb2x5bGluZSBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMzsgc3Ryb2tlOiAjZmZmZmZmIiBwb2ludHM9IjM3MC4zMSw0NjMuMTExIDM3MC4zMSw0ODcuNiA0OTcsNDg3LjYgNDk3LDI5LjA5OTIgNjY1Ljc3NiwyOS4wOTkyIDY2NS43NzYsNjguNTc1OSAiLz4KICAgIDxwb2x5bGluZSBzdHlsZT0iZmlsbDogbm9uZTsgZmlsbC1vcGFjaXR5OjA7IHN0cm9rZS13aWR0aDogMzsgc3Ryb2tlOiAjZmZmZmZmIiBwb2ludHM9IjY2MC43NzYsNjEuOTMgNjY1Ljc3Niw3MS45MyA2NzAuNzc2LDYxLjkzICIvPgogIDwvZz4KICA8dGV4dCBmb250LXNpemU9IjIyLjU3NzgiIHN0eWxlPSJmaWxsOiAjZmZmZmZmO3RleHQtYW5jaG9yOnN0YXJ0O2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsIiB4PSI2ODcuMDU0IiB5PSIyMzQuMjU0Ij4KICAgIDx0c3BhbiB4PSI2ODcuMDU0IiB5PSIyMzQuMjU0Ij5ZPC90c3Bhbj4KICA8L3RleHQ+CiAgPHRleHQgZm9udC1zaXplPSIyMi41Nzc4IiBzdHlsZT0iZmlsbDogI2ZmZmZmZjt0ZXh0LWFuY2hvcjpzdGFydDtmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbCIgeD0iNTY2LjM1NiIgeT0iMTc1LjkwMiI+CiAgICA8dHNwYW4geD0iNTY2LjM1NiIgeT0iMTc1LjkwMiI+TjwvdHNwYW4+CiAgPC90ZXh0PgogIDx0ZXh0IGZvbnQtc2l6ZT0iMjIuNTc3OCIgc3R5bGU9ImZpbGw6ICNmZmZmZmY7dGV4dC1hbmNob3I6c3RhcnQ7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWwiIHg9IjY4MS4wNTQiIHk9IjQwNi4xNTIiPgogICAgPHRzcGFuIHg9IjY4MS4wNTQiIHk9IjQwNi4xNTIiPlk8L3RzcGFuPgogIDwvdGV4dD4KICA8dGV4dCBmb250LXNpemU9IjIyLjU3NzgiIHN0eWxlPSJmaWxsOiAjZmZmZmZmO3RleHQtYW5jaG9yOnN0YXJ0O2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsIiB4PSI1NDIuMzU2IiB5PSIzNDYuMjE2Ij4KICAgIDx0c3BhbiB4PSI1NDIuMzU2IiB5PSIzNDYuMjE2Ij5OPC90c3Bhbj4KICA8L3RleHQ+Cjwvc3ZnPgo=) --- ### Claim a bug * [Servo Starters](https://starters.servo.org/) * Leave a comment in the issue * Ask questions in the issue or IRC --- ### Building & Testing * `./mach build -d`: debug build * `./mach build -r`: release build, required for running tests * `./mach build -d -j8`: 8 thread * `./mach test-*` * `./mach run -[d|r]` * `-w`: enable webrender * `-b`: enable browser.html * `./mach run -d --debug --debugger=gdb` --- ### Before Pull Request * `./mach build -d` * `./mach test-tidy` * Other tests * `./mach test-wpt`: DOM * `./mach test-css`: style, layout * `./mach test-unit` * Title examples: * Fixed something to resolve this problem * Added something to provide some benefit --- ### After PR created * `highfive` bot will assign reviewer for you (Ask for `r?someone`) * Reviewer will ask you to fix something * `git push` to your branch * Reviewer will `r+` (i.e. accept your patch) * When ready, run `git rebase -i` to squash, then `git push -f` * bors-servo will auto-test and merge your commit. --- ### Code Organization ```bash . ├── components # code! ├── tests # tests ├── python # mach tool and other ├── target # build output │ ├── debug │ └── release ├── docs # documentation │ # You probably won't touch ├── etc ├── ports ├── resources └── support ``` --- ### Source code ```bash components ├── servo # The main function ├── constellation # Where all the threads communicate ├── net # Network ├── script # DOM/JavaScript ├── style # CSS Rules ├── script_layout_interface ├── layout # Layout algorithms ├── layout_thread # The thread that runs the layout process ├── gfx # The graphics stack, font, etc. ├── compositing ├── msg ├── canvas ├── plugins ├── range ├── profile # Profiling ├── devtools # Developer Tools ├── webdriver_server # WebDriver for test automation ├── util └── *_traits ``` --- ### Infra & Tests ```bash . ├── python │ ├── mach │ ├── servo # Mach commands │ ├── tidy │ └── _virtualenv └── tests ├── unit ├── wpt │ ├── metadata # Test expectations │ ├── web-platform-tests │ ├── metadata-css # Test expectation for css tests │ ├── css-tests │ └── mozilla # Servo-specific ├── dromaeo # JS Benchmark ├── compiletest ├── heartbeats ├── html ├── jquery └── power ``` --- ### Other Repos * In [https://github.com/servo](https://github.com/servo) * `servo/webrender`: WebRender * `servo/saltfs`: CI stuff * `servo/servo.org`: The website * Various `rust-*` repos --- ### Documentations * Wiki: [https://github.com/servo/servo/wiki](https://github.com/servo/servo/wiki) * In-tree doc: [`docs/`](https://github.com/servo/servo/tree/master/docthub.com/servo/servo/tree/master/docss) * Code comments
* Trace code online: https://dxr.mozilla.org/servo/source/ --- ### Project Ideas * [`Taiwan Code Sprint` milestones](https://github.com/servo/servo/issues?q=is%3Aopen+is%3Aissue+milestone%3A%22Taiwan+Code+Sprint%22) * Flow Tree Dump: [#12675](https://github.com/servo/servo/issues/12675) - Refactor to serde - Debug the trigger point - Reuse the viewer * Profiler * Compatiable with Gecko * `./mach test-perf`: [#12792](https://github.com/servo/servo/issues/12792) - More followups [#13008](https://github.com/servo/servo/issues/13008) * Flexbox: [#12453](https://github.com/servo/servo/issues/12453#issuecomment-239611493a) --- ### Let's say Hi on the IRC * `#servo` on irc.mozilla.org * http://chat.mibbit.com/?server=irc.mozilla.org&channel=%23servo --- class: center, middle # Backup --- ### Full file tree ``` . ├── components │ ├── canvas │ ├── canvas_traits │ ├── compositing │ ├── constellation │ ├── devtools │ ├── devtools_traits │ ├── gfx │ ├── gfx_traits │ ├── layout │ ├── layout_thread │ ├── layout_traits │ ├── msg │ ├── net │ ├── net_traits │ ├── plugins │ ├── profile │ ├── profile_traits │ ├── range │ ├── script │ ├── script_layout_interface │ ├── script_traits │ ├── servo │ ├── style │ ├── style_traits │ ├── util │ └── webdriver_server ├── docs │ └── components ├── etc │ ├── ci │ └── doc.servo.org ├── ports │ ├── cef │ ├── geckolib │ └── glutin ├── python │ ├── mach │ ├── servo │ ├── tidy │ ├── tidy_self_test │ └── _virtualenv ├── resources │ ├── ahem │ ├── shaders │ └── user-agent-js ├── support │ ├── android │ ├── rust-task_info │ └── windows ├── target │ ├── debug │ ├── geckolib │ └── release └── tests ├── compiletest ├── dromaeo ├── heartbeats ├── html ├── jquery ├── power ├── unit └── wpt ```