| 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 |