| | 1 | = WebKit Goals for 2018 = |
| | 2 | ''by Maciej Stachowiak'' |
| | 3 | |
| | 4 | - There are no promises about what we're working on, this is just what we're interested in |
| | 5 | - Audiences: Users, Native Developers, Web Developers, WebKit Contributors |
| | 6 | - We plan stuff for all of these audiences |
| | 7 | - Users: Security, Privacy, Performance, Platform Integration |
| | 8 | - Native Devs: More clients on Modern WebKit, Complete JSC API |
| | 9 | - Web Devs: Web APIs, Media, Grpahics, Text, Compliance & Compat, Dev Tools (Back to basics) |
| | 10 | - Webit Contributors: Build speed, Better tools |
| | 11 | |
| | 12 | == Users == |
| | 13 | |
| | 14 | - Security (Code Exec, & UXSS Mitigations) |
| | 15 | - Universal Cross-Site Scripting |
| | 16 | - Gigacage, Isoheaps, Bulletproof JIT, Safe casting and unions, reduce use of raw pointers, DOM Event timing, No render tree mutation during layout |
| | 17 | - Other: Sandbox harding, Fuzzer fixes, Security response, Security-enabling web platform features |
| | 18 | - Apple will be focusing on their sandbox, encourage other teams to do the same |
| | 19 | - Will fix fuzzer bugs |
| | 20 | - New web platform features for sites to strengthen their own security (CSP, Subresource Integrity) |
| | 21 | |
| | 22 | |
| | 23 | == Privacy == |
| | 24 | |
| | 25 | - Intelligent Tracking Prevention, use machine learning and stuff to prevent cross-site tracking |
| | 26 | - Will focus on improving it, tightening it, but make it easier for sites impacted by it |
| | 27 | - Looking into API for embedded content to get access to cookies with user consent |
| | 28 | - Affiliated domains |
| | 29 | - Improvements to private browsing mode) |
| | 30 | - Investigate stateless tracking |
| | 31 | - ITP is for stateful tracking prevention |
| | 32 | - Fingerprinting is a method for stateless tracking, behavioral fingerprinting, and other techniques |
| | 33 | - DNT was a failure, so we're looking at technological enforcement |
| | 34 | |
| | 35 | == Performance == |
| | 36 | |
| | 37 | - Significantly improving Speedometer, MotionMark, ARES-6 |
| | 38 | - Also Jetstream, JSBench |
| | 39 | - Non-benchmark areas for improvements. Primarily: Page load speed, memory use, scrolling, battery life |
| | 40 | - Also important: WebAssembly, Worst-case JS (no excuses) |
| | 41 | - ExcuseBench? Code that uses JS that is known to be badly optimized |
| | 42 | - Old benchmarks Apple sees as legacy: Kraken, Octane, SunSpider, WebXPRT, Dromaeo |
| | 43 | |
| | 44 | == Platform Integration == |
| | 45 | |
| | 46 | - Clipboard quality |
| | 47 | - Devs that do rich text editors care about this (TinyMCE) |
| | 48 | - File upload enhancements |
| | 49 | - Want to make it work really well |
| | 50 | - Drag & Drop enhancements |
| | 51 | - On iPad now (and on Mac) |
| | 52 | - Better Touch Bar support |
| | 53 | - Exposes editing/playback controls |
| | 54 | - don't work consistently across websites, want to improve it |
| | 55 | - Non-rectangular display support |
| | 56 | - For new devices (like iPhone X) |
| | 57 | |
| | 58 | == More Clients on Modern WebKit == |
| | 59 | |
| | 60 | - Adoption blockers for Apple apps |
| | 61 | - Adoption blockers for third-party apps |
| | 62 | - Want to start phasing out the legacy API (single-process model) |
| | 63 | - Supporting both models is challenging for some features |
| | 64 | - If you're using the legacy API, you should start replacing it |
| | 65 | - It's not safe, it's not responsive |
| | 66 | |
| | 67 | |
| | 68 | == JavaScriptCore API Completeness == |
| | 69 | |
| | 70 | - Native API for ES6 |
| | 71 | - Native API for Web Assembly |
| | 72 | |
| | 73 | == Web Developers == |
| | 74 | |
| | 75 | (Again, not discussing timelines, schedules. Sometimes we work for a long time until a feature is ready to ship. Can't promise that any of these will ship) |
| | 76 | |
| | 77 | == Top Requests == |
| | 78 | |
| | 79 | - Service Workers |
| | 80 | - Worries about battery life for background processes |
| | 81 | - We think it can be done and not drain batteries based on our engagement in standards |
| | 82 | - Push |
| | 83 | - Beacon |
| | 84 | - Lazy phone-home |
| | 85 | - replace sync XHR and unload events for metrics |
| | 86 | - Directory Upload |
| | 87 | - Intersection Observer |
| | 88 | - Ad networks don't give credit for view if it hasn't been visible for some seconds |
| | 89 | - This allows devs do it in a good way, without using invisible Flash |
| | 90 | - Payment Request |
| | 91 | - Looking to get Apple Pay into the emerging standards |
| | 92 | - requestIdleCallback |
| | 93 | - Another popular request for setTimeout('', 0) |
| | 94 | |
| | 95 | == But wait... There's More! == |
| | 96 | |
| | 97 | - Template data binding |
| | 98 | - Web Components: declarative syntax |
| | 99 | - Web Animations |
| | 100 | - Really interested in it, unifies various animation APIs |
| | 101 | - <dialog> element |
| | 102 | - Interested in it to replace showModalDialog |
| | 103 | - Internationalization API |
| | 104 | - Web Assembly Thread |
| | 105 | - Geolocation floor level |
| | 106 | - Done work to expose floor level for devices that have that info |
| | 107 | - Useful new functionality, we hope it makes it to standards |
| | 108 | |
| | 109 | == Form Controls == |
| | 110 | |
| | 111 | - date controls |
| | 112 | - <input type=color> |
| | 113 | - <datalist> |
| | 114 | - inputmode attribute |
| | 115 | - <menu> + <command> |
| | 116 | |
| | 117 | == Graphics == |
| | 118 | |
| | 119 | - WebGPU (continuing standards work) |
| | 120 | - Apple worked with game companies, frameworks, chipset vendors |
| | 121 | - Give web graphics same performance benefits as native graphics libraries |
| | 122 | - Recently designed a new shader language |
| | 123 | - Most work will be in standards rather than codes |
| | 124 | - If you're interested, talk to Myles or check out the WebGPU standards group |
| | 125 | - WebGL 2 |
| | 126 | - WebVR |
| | 127 | - OffscreenCanvas |
| | 128 | - More complex drawing without taking up main thread |
| | 129 | - Async image decoding |
| | 130 | - Explored automatic ways, we think there are other APIs needed (opt-in attribute), explicit decode API to ask browser to decode right now |
| | 131 | |
| | 132 | == Media == |
| | 133 | |
| | 134 | We care about HEVC (h.265), some devices have hardware support for it for efficiency |
| | 135 | |
| | 136 | - Media Capabilities API |
| | 137 | - Want to offer more info to video sites about what codec to use |
| | 138 | - More WebRTC |
| | 139 | - Biggest marquee features, but there is a lot more we can do for interop and new functionality |
| | 140 | - Modern EME |
| | 141 | - Encrypted Media Extensions (DRM on the web) |
| | 142 | - This is what it takes for premium video on the web |
| | 143 | - 360 Video |
| | 144 | - Many cases sites that offer this disable it in Safari, want to enable it on YouTube, Vimeo |
| | 145 | |
| | 146 | == Text == |
| | 147 | |
| | 148 | - CSS font-display |
| | 149 | - Unicode 10 |
| | 150 | - OpenType-SVG fonts |
| | 151 | - New standard to use SVG in an open-type font container for scalable color fonts |
| | 152 | |
| | 153 | == Compliance & Compatibility == |
| | 154 | |
| | 155 | - HTML Event Loop |
| | 156 | - There is a detailed standard |
| | 157 | - As features are added require it (requestIdleCallback) we will move toward this |
| | 158 | - Pass all of test262 |
| | 159 | - Official test script for ECMAScript, want to get back to fully testing it |
| | 160 | - First complete ES6, fastest ES6, want complete support for fully compliant ES6 |
| | 161 | - Pass more of WPT |
| | 162 | - HTML5test |
| | 163 | - Easy to run, shows a number that is easy to compare |
| | 164 | - Doesn't do any check if the implementation is correct or complete |
| | 165 | - Expect this number to go up significantly |
| | 166 | |
| | 167 | == Dev Tools: Back to Basics == |
| | 168 | |
| | 169 | - Network tab redesign |
| | 170 | - Styles sidebar redesign |
| | 171 | - WebDriver quality |
| | 172 | - Canvas inspection |
| | 173 | |
| | 174 | Want areas of inspector to be more usable and more familiar |
| | 175 | Want to move toward this without losing the high degree of UX polish |
| | 176 | If you're interested in working on tools you can enable these as experimental |
| | 177 | |
| | 178 | == Considering next level features == |
| | 179 | |
| | 180 | - Top Level UI |
| | 181 | - Console |
| | 182 | - Debugger |
| | 183 | - Responsive Design Mode |
| | 184 | - Improved app and device inspection |
| | 185 | - W3C WebDriver (standard coming out, not something any browser implements today) |
| | 186 | |
| | 187 | == WebKit Contributors == |
| | 188 | |
| | 189 | === Build Speed === |
| | 190 | |
| | 191 | - Clean builds take too long, Incremental builds take too long |
| | 192 | - Working to improve build speed |
| | 193 | |
| | 194 | === Better Tools and Services === |
| | 195 | |
| | 196 | - EWS (Early Warning System) improvements |
| | 197 | - Other teams at Apple are jealous of this |
| | 198 | - Pre-check before landing is even more powerful than CI |
| | 199 | - Bot reliability |
| | 200 | - Easier to run benchmarks |
| | 201 | - changing it to run on top of WebDriver |
| | 202 | - Existing fully automated testing |
| | 203 | - Buildbot upgrade |
| | 204 | |
| | 205 | === Code & Test Cleanup === |
| | 206 | |
| | 207 | - Next generation layout |
| | 208 | - LayoutTest debt repayment |
| | 209 | - Better way to do feature flags |
| | 210 | - Web Inspector UI testing |
| | 211 | - Remove CSS regions |
| | 212 | - Didn't get traction |
| | 213 | - Will get 60 fps on mobile |
| | 214 | |
| | 215 | Welcome people working with us on these areas. Don't promise to ship any of them. |
| | 216 | |
| | 217 | |
| | 218 | = Questions = |
| | 219 | |
| | 220 | What about HEIF support? |
| | 221 | |
| | 222 | - Tricky question, deliberately disabled. Don't want to pollute the web without a well thought out story. |
| | 223 | - Needs more definition |
| | 224 | - Most people are uncomfortable with a heavily patent encumbered format |
| | 225 | - No definitive plan at this time |
| | 226 | - WebP has given a big nudge toward compression for images on the web |