1 00:00:06,320 --> 00:00:11,499 [Music] 2 00:00:15,839 --> 00:00:19,199 hi everyone welcome back hope you're all 3 00:00:18,320 --> 00:00:22,400 still 4 00:00:19,199 --> 00:00:24,240 full of energy and excitement um towards 5 00:00:22,400 --> 00:00:26,480 the end of the day i didn't think i 6 00:00:24,240 --> 00:00:29,679 would be but somehow all of these lovely 7 00:00:26,480 --> 00:00:33,600 talks are keeping me going 8 00:00:29,679 --> 00:00:35,120 next up we have emmanuela bassey 9 00:00:33,600 --> 00:00:36,399 telling us about a year in the life of 10 00:00:35,120 --> 00:00:39,760 gtk 11 00:00:36,399 --> 00:00:42,000 so emanuela has been working on gtk and 12 00:00:39,760 --> 00:00:44,079 gnome for over 15 years both as a 13 00:00:42,000 --> 00:00:46,399 volunteer and on commercial products 14 00:00:44,079 --> 00:00:49,280 based on gnome technologies like memo on 15 00:00:46,399 --> 00:00:49,280 nokia hardware 16 00:00:49,680 --> 00:00:56,399 he will be taking questions at the end 17 00:00:52,559 --> 00:00:58,879 so please use the um chat in 18 00:00:56,399 --> 00:01:01,840 point that way in venus not the chat the 19 00:00:58,879 --> 00:01:03,199 questions tab above the chat um to ask 20 00:01:01,840 --> 00:01:06,400 your questions and i will pass them on 21 00:01:03,199 --> 00:01:09,760 to emmanuella at the end um so thank you 22 00:01:06,400 --> 00:01:13,439 very much all over to you 23 00:01:09,760 --> 00:01:14,799 hi and thank you and thanks everyone for 24 00:01:13,439 --> 00:01:17,520 joining me 25 00:01:14,799 --> 00:01:20,080 in this uh presentation and also thanks 26 00:01:17,520 --> 00:01:21,119 for to lca for 27 00:01:20,080 --> 00:01:23,280 uh 28 00:01:21,119 --> 00:01:26,479 giving me the chance to talk about gtk 29 00:01:23,280 --> 00:01:26,479 uh in this conference 30 00:01:26,880 --> 00:01:29,520 so 31 00:01:27,759 --> 00:01:32,079 we're going to talk a little bit about a 32 00:01:29,520 --> 00:01:36,640 year in the life of the gtk project 33 00:01:32,079 --> 00:01:36,640 since we the gta project has been 34 00:01:36,880 --> 00:01:42,079 doing a major release 35 00:01:38,799 --> 00:01:45,280 for the first time in nearly 10 years so 36 00:01:42,079 --> 00:01:47,520 stuff has changed uh in the year before 37 00:01:45,280 --> 00:01:49,840 that and in this year 38 00:01:47,520 --> 00:01:52,560 is changing again uh there's there's 39 00:01:49,840 --> 00:01:55,040 lots of stuff to cover so 40 00:01:52,560 --> 00:01:55,920 let's start 41 00:01:55,040 --> 00:01:58,719 so 42 00:01:55,920 --> 00:02:02,000 i am part of the gdk development team 43 00:01:58,719 --> 00:02:02,799 and i've been working on gtk and gnome 44 00:02:02,000 --> 00:02:05,600 for 45 00:02:02,799 --> 00:02:07,040 about 15 years now 46 00:02:05,600 --> 00:02:09,599 i'm mostly involved in a core 47 00:02:07,040 --> 00:02:10,479 application development platform 48 00:02:09,599 --> 00:02:11,840 so 49 00:02:10,479 --> 00:02:13,840 core libraries 50 00:02:11,840 --> 00:02:14,800 but i also work with 51 00:02:13,840 --> 00:02:16,879 the 52 00:02:14,800 --> 00:02:19,360 developer documentation 53 00:02:16,879 --> 00:02:22,560 the documentation team 54 00:02:19,360 --> 00:02:24,720 i maintain the odd application and i 55 00:02:22,560 --> 00:02:27,280 collaborate with other gnome maintainers 56 00:02:24,720 --> 00:02:30,400 in the release team 57 00:02:27,280 --> 00:02:33,840 my contributions have been part of 58 00:02:30,400 --> 00:02:36,000 both my literal job for years 59 00:02:33,840 --> 00:02:37,840 but i also worked on gnome and gtk on my 60 00:02:36,000 --> 00:02:38,720 spare time so i 61 00:02:37,840 --> 00:02:40,560 i'm 62 00:02:38,720 --> 00:02:43,040 usually able to appreciate the use of 63 00:02:40,560 --> 00:02:45,360 gtk and gnome technologies 64 00:02:43,040 --> 00:02:48,000 as a downstream developer as well as a 65 00:02:45,360 --> 00:02:48,000 volunteer 66 00:02:49,680 --> 00:02:55,840 gdk is a very old project 67 00:02:52,319 --> 00:02:57,440 these days it's nearly 25 years old um 68 00:02:55,840 --> 00:02:58,400 it's been in continuous development 69 00:02:57,440 --> 00:03:01,920 since 70 00:02:58,400 --> 00:03:03,680 roughly 1995 1996. 71 00:03:01,920 --> 00:03:05,599 uh when it was written as part of the 72 00:03:03,680 --> 00:03:08,319 new image manipulation program to 73 00:03:05,599 --> 00:03:11,120 replace motif which was the toolkit used 74 00:03:08,319 --> 00:03:14,319 at the very beginning 75 00:03:11,120 --> 00:03:17,519 over the past 25 years gtk has seen 76 00:03:14,319 --> 00:03:22,159 three major version bumps from gtk 1 to 77 00:03:17,519 --> 00:03:23,920 2 from 2 to 3 and now from 3 to 4 78 00:03:22,159 --> 00:03:27,360 and has been used and deployed to 79 00:03:23,920 --> 00:03:30,959 millions of devices all around the world 80 00:03:27,360 --> 00:03:32,959 the last major release of gtk gtk4 is 81 00:03:30,959 --> 00:03:35,200 probably 82 00:03:32,959 --> 00:03:38,640 the biggest leap in terms of the toolkit 83 00:03:35,200 --> 00:03:41,280 internal design since the 2.0 days 84 00:03:38,640 --> 00:03:44,319 and it was a change driven both by the 85 00:03:41,280 --> 00:03:46,879 evolution of windowing systems on linux 86 00:03:44,319 --> 00:03:48,959 and by the challenges and 87 00:03:46,879 --> 00:03:50,480 the realities of maintaining a 88 00:03:48,959 --> 00:03:53,439 volunteer-driven 89 00:03:50,480 --> 00:03:54,640 free software toolkit with no central 90 00:03:53,439 --> 00:03:59,799 authority 91 00:03:54,640 --> 00:03:59,799 and very minimal corporate backing 92 00:04:00,319 --> 00:04:05,120 so today i'm going to talk to you a 93 00:04:03,360 --> 00:04:08,560 little bit about the changes that led to 94 00:04:05,120 --> 00:04:10,319 gtk 4.0 in 2020 95 00:04:08,560 --> 00:04:15,239 and what happened to the project and 96 00:04:10,319 --> 00:04:15,239 around it in the years since then 97 00:04:17,919 --> 00:04:22,880 um 98 00:04:19,519 --> 00:04:25,280 in 2016 the main topic of discussion 99 00:04:22,880 --> 00:04:28,240 about gdk was whether we could improve 100 00:04:25,280 --> 00:04:30,080 the rendering pipeline for gtk3 which 101 00:04:28,240 --> 00:04:34,080 was the major version at the time 102 00:04:30,080 --> 00:04:36,080 without breaking the api contract 103 00:04:34,080 --> 00:04:37,919 the fact of the matter though was that 104 00:04:36,080 --> 00:04:40,800 we had been changing the internals of 105 00:04:37,919 --> 00:04:43,680 the toolkit a lot more than we 106 00:04:40,800 --> 00:04:45,600 did back in 2006 107 00:04:43,680 --> 00:04:47,040 when we introduced cairo in the 108 00:04:45,600 --> 00:04:49,040 rendering pipeline 109 00:04:47,040 --> 00:04:50,800 and we moved away from the internal 110 00:04:49,040 --> 00:04:54,479 drawing api that 111 00:04:50,800 --> 00:04:56,160 mimicked and wrapped xlib 112 00:04:54,479 --> 00:04:58,720 we're also looking at the transition 113 00:04:56,160 --> 00:05:01,600 period in which we'd say uh goodbye to 114 00:04:58,720 --> 00:05:03,600 x11 and hello to wayland 115 00:05:01,600 --> 00:05:05,280 and on the other side of things we were 116 00:05:03,600 --> 00:05:08,080 seeing the adoption of a high dpi 117 00:05:05,280 --> 00:05:10,720 density displays on both laptops and 118 00:05:08,080 --> 00:05:13,919 desktops as well as dedicated graphical 119 00:05:10,720 --> 00:05:17,120 hardware with 3d acceleration 120 00:05:13,919 --> 00:05:19,039 during the gtk 3 stable cycle we did 121 00:05:17,120 --> 00:05:20,000 change a lot of the rendering pipeline 122 00:05:19,039 --> 00:05:22,000 worked 123 00:05:20,000 --> 00:05:24,479 to allow proper transparency between 124 00:05:22,000 --> 00:05:27,919 widgets for instance or implementing 125 00:05:24,479 --> 00:05:30,479 things like css borders and shadows that 126 00:05:27,919 --> 00:05:33,759 extended outside the widgets area and 127 00:05:30,479 --> 00:05:33,759 blended with the background 128 00:05:34,160 --> 00:05:40,800 these changes required little to 129 00:05:36,880 --> 00:05:41,600 no updates in idiomatic code 130 00:05:40,800 --> 00:05:43,840 which 131 00:05:41,600 --> 00:05:46,080 is good in general 132 00:05:43,840 --> 00:05:48,960 but there was a lot of a non-idiomatic 133 00:05:46,080 --> 00:05:52,400 code in applications that were highly 134 00:05:48,960 --> 00:05:55,759 ported from gtk2 to gtk3 back when we 135 00:05:52,400 --> 00:05:57,360 release gnome 3.0 136 00:05:55,759 --> 00:05:59,520 um 137 00:05:57,360 --> 00:06:01,440 this is a time when we did not make 138 00:05:59,520 --> 00:06:04,800 ourselves any friends with application 139 00:06:01,440 --> 00:06:05,759 developers that consume the platform 140 00:06:04,800 --> 00:06:07,440 and 141 00:06:05,759 --> 00:06:10,000 especially the ones that were consuming 142 00:06:07,440 --> 00:06:12,160 the platforms three years at a time by 143 00:06:10,000 --> 00:06:13,840 updating their development 144 00:06:12,160 --> 00:06:17,520 uh machines 145 00:06:13,840 --> 00:06:22,400 uh using long-term releases 146 00:06:17,520 --> 00:06:22,400 from the distributions like ubuntu 147 00:06:24,240 --> 00:06:29,600 our main problem was effectively cairo 148 00:06:27,919 --> 00:06:32,560 cairo is 149 00:06:29,600 --> 00:06:34,960 was still is a high quality vector-based 150 00:06:32,560 --> 00:06:37,520 2d rendering api 151 00:06:34,960 --> 00:06:40,400 while it introduced this high quality 152 00:06:37,520 --> 00:06:43,199 rendering to graphical user interfaces 153 00:06:40,400 --> 00:06:44,800 it was limited by its design which 154 00:06:43,199 --> 00:06:48,160 reflected the area in which it was 155 00:06:44,800 --> 00:06:50,479 developed so the early 2000s 156 00:06:48,160 --> 00:06:53,680 thanks to cairo we were able to move gtk 157 00:06:50,479 --> 00:06:56,639 to a css based drawing state just like 158 00:06:53,680 --> 00:06:58,960 web rendering engines 159 00:06:56,639 --> 00:07:00,720 like those web branding engines 160 00:06:58,960 --> 00:07:02,800 soon discovered 161 00:07:00,720 --> 00:07:05,199 it is effectively easier to take 162 00:07:02,800 --> 00:07:06,800 whatever state cairo has blow it away 163 00:07:05,199 --> 00:07:09,599 and replace it entirely with the state 164 00:07:06,800 --> 00:07:12,639 of the css machinery that is held 165 00:07:09,599 --> 00:07:14,160 client-side in the toolkit 166 00:07:12,639 --> 00:07:16,000 and this is especially true if you're 167 00:07:14,160 --> 00:07:20,080 running something that looks like a lot 168 00:07:16,000 --> 00:07:22,080 like a gui as opposed to a vector image 169 00:07:20,080 --> 00:07:24,960 another problem at the core of cairo was 170 00:07:22,080 --> 00:07:27,680 its reliance on fast read back pipelines 171 00:07:24,960 --> 00:07:29,759 between the cpu and the system memory 172 00:07:27,680 --> 00:07:34,479 which is something that just does not 173 00:07:29,759 --> 00:07:34,479 exist in modern systems using a gpu 174 00:07:34,720 --> 00:07:38,720 finally the maintenance status of the 175 00:07:36,560 --> 00:07:40,240 project had been in question ever since 176 00:07:38,720 --> 00:07:43,199 intel approached the two people 177 00:07:40,240 --> 00:07:45,599 responsible for maintaining the library 178 00:07:43,199 --> 00:07:48,639 one after the other first uh kyle worth 179 00:07:45,599 --> 00:07:51,120 and then chris wilson 180 00:07:48,639 --> 00:07:52,639 in the end cairo is an api that makes 181 00:07:51,120 --> 00:07:54,720 sense as an internal detail of the 182 00:07:52,639 --> 00:07:58,879 toolkit 183 00:07:54,720 --> 00:08:01,680 sadly we exposed it as part of our api 184 00:07:58,879 --> 00:08:04,240 to application and library developers 185 00:08:01,680 --> 00:08:06,639 and that made it necessary to write 186 00:08:04,240 --> 00:08:08,560 wrappers around it to represent a full 187 00:08:06,639 --> 00:08:11,759 set of rendering operations 188 00:08:08,560 --> 00:08:14,319 in order to hide the fact that 189 00:08:11,759 --> 00:08:17,360 the car api didn't actually 190 00:08:14,319 --> 00:08:19,360 work the way we wanted 191 00:08:17,360 --> 00:08:21,599 but at that point though why would you 192 00:08:19,360 --> 00:08:23,520 be using cairo at all when 193 00:08:21,599 --> 00:08:25,280 cairo didn't give you access to the most 194 00:08:23,520 --> 00:08:27,840 efficient graphical hardware on your 195 00:08:25,280 --> 00:08:27,840 system 196 00:08:28,319 --> 00:08:34,959 well because sadly the actual api that 197 00:08:31,840 --> 00:08:36,560 lets you access the hardware is opengl 198 00:08:34,959 --> 00:08:40,000 which has been known to be a disaster 199 00:08:36,560 --> 00:08:42,000 zone for years especially in linux 200 00:08:40,000 --> 00:08:44,959 luckily the introduction of mainstream 201 00:08:42,000 --> 00:08:48,320 x11 compositors using opengl like 202 00:08:44,959 --> 00:08:50,880 compies in the mid-2000s and gunam shell 203 00:08:48,320 --> 00:08:53,040 in 2011 204 00:08:50,880 --> 00:08:55,279 at the effect of improving the gl driver 205 00:08:53,040 --> 00:08:57,360 support which in turn pushed more people 206 00:08:55,279 --> 00:08:58,959 to make use of gl for applications and 207 00:08:57,360 --> 00:09:00,640 games 208 00:08:58,959 --> 00:09:02,640 and that 209 00:09:00,640 --> 00:09:04,880 it was coupled with improvements in the 210 00:09:02,640 --> 00:09:07,680 gl standard api 211 00:09:04,880 --> 00:09:11,279 which deprecated at first and then 212 00:09:07,680 --> 00:09:14,560 jettisoned the old craft from the 90s 213 00:09:11,279 --> 00:09:17,279 and basically pushed for um 214 00:09:14,560 --> 00:09:19,519 using the gpu as a programmable resource 215 00:09:17,279 --> 00:09:22,320 instead of a completely opaque state 216 00:09:19,519 --> 00:09:24,000 machine 217 00:09:22,320 --> 00:09:26,560 a gl based css 218 00:09:24,000 --> 00:09:29,680 state render is much more tractable than 219 00:09:26,560 --> 00:09:31,519 implementing a fully generic vector api 220 00:09:29,680 --> 00:09:34,320 and you can get a lot of mileage out of 221 00:09:31,519 --> 00:09:36,720 small shaders to do things like shadows 222 00:09:34,320 --> 00:09:39,760 borders 223 00:09:36,720 --> 00:09:43,600 this was demonstrated by projects like 224 00:09:39,760 --> 00:09:45,440 mozilla servos web render 225 00:09:43,600 --> 00:09:47,839 which acted as an inspiration for the 226 00:09:45,440 --> 00:09:49,839 gtk rendering pipeline 227 00:09:47,839 --> 00:09:51,920 for instance once you have a full tree 228 00:09:49,839 --> 00:09:54,399 of rendering operations you can decide 229 00:09:51,920 --> 00:09:57,200 what changed from a previous frame 230 00:09:54,399 --> 00:09:59,600 what didn't and what to remove from the 231 00:09:57,200 --> 00:10:01,120 graph of operations since it will never 232 00:09:59,600 --> 00:10:02,959 be visible 233 00:10:01,120 --> 00:10:04,399 at that point you can re-render 234 00:10:02,959 --> 00:10:07,519 everything 235 00:10:04,399 --> 00:10:10,160 and do it faster than just caching 236 00:10:07,519 --> 00:10:14,320 intermediate states and then 237 00:10:10,160 --> 00:10:14,320 figuring out how to expire that cache 238 00:10:15,279 --> 00:10:20,480 suddenly 239 00:10:16,880 --> 00:10:23,440 by doing this the rendering step of each 240 00:10:20,480 --> 00:10:25,920 frame is not the bottleneck anymore and 241 00:10:23,440 --> 00:10:28,720 that gives you much more time to do 242 00:10:25,920 --> 00:10:31,680 um layout at 60fps 243 00:10:28,720 --> 00:10:34,959 or whatever frame per second is your 244 00:10:31,680 --> 00:10:34,959 screen refresh rate 245 00:10:35,519 --> 00:10:39,360 and also gives more time 246 00:10:37,760 --> 00:10:41,200 to 247 00:10:39,360 --> 00:10:44,079 application logic to 248 00:10:41,200 --> 00:10:44,079 do its own thing 249 00:10:45,360 --> 00:10:52,240 um speaking of pushing at 60fps um 250 00:10:48,959 --> 00:10:54,480 the task of doing so becomes really hard 251 00:10:52,240 --> 00:10:57,440 when um 252 00:10:54,480 --> 00:10:59,440 you're dealing with large resolutions 253 00:10:57,440 --> 00:11:02,480 your cpu 254 00:10:59,440 --> 00:11:04,000 back in the day of the early 2000s 255 00:11:02,480 --> 00:11:06,959 late 90s even 256 00:11:04,000 --> 00:11:10,720 your cpu could deal with pushing 800 by 257 00:11:06,959 --> 00:11:12,240 600 pixels or even 1024x768 258 00:11:10,720 --> 00:11:15,360 per frame 259 00:11:12,240 --> 00:11:17,600 but once you get to 1080p 260 00:11:15,360 --> 00:11:20,560 2k 4k 8k 261 00:11:17,600 --> 00:11:23,120 uh or even multiple displays uh with 262 00:11:20,560 --> 00:11:24,800 very large resolutions then you 263 00:11:23,120 --> 00:11:26,839 definitely need something more powerful 264 00:11:24,800 --> 00:11:31,680 than your cpu 265 00:11:26,839 --> 00:11:34,720 and uh hi idpi displays also require 266 00:11:31,680 --> 00:11:37,279 changing the nature of pixels uh from 267 00:11:34,720 --> 00:11:38,160 something that is physical so it's an 268 00:11:37,279 --> 00:11:39,360 actual 269 00:11:38,160 --> 00:11:40,160 like 270 00:11:39,360 --> 00:11:42,160 uh 271 00:11:40,160 --> 00:11:43,760 point of light on your screen to a 272 00:11:42,160 --> 00:11:45,600 logical unit 273 00:11:43,760 --> 00:11:47,519 so you don't accidentally turn your 274 00:11:45,600 --> 00:11:49,680 desktop into the most challenging level 275 00:11:47,519 --> 00:11:52,399 of mine sweeper ever 276 00:11:49,680 --> 00:11:53,920 and you'll need a magnifying glass to 277 00:11:52,399 --> 00:11:56,880 hit uh 278 00:11:53,920 --> 00:11:58,320 like ridiculously small buttons or three 279 00:11:56,880 --> 00:12:00,639 very very 280 00:11:58,320 --> 00:12:02,959 small text 281 00:12:00,639 --> 00:12:05,200 this requires changing how you load 282 00:12:02,959 --> 00:12:08,079 image assets in your application i use 283 00:12:05,200 --> 00:12:10,480 size windowing system surfaces and how 284 00:12:08,079 --> 00:12:12,639 you align every ui element to the pixel 285 00:12:10,480 --> 00:12:16,399 grid especially text 286 00:12:12,639 --> 00:12:16,399 otherwise you get a blurry mess 287 00:12:20,240 --> 00:12:24,800 alongside the changes in the lower 288 00:12:22,399 --> 00:12:26,639 layers of the stack that impact directly 289 00:12:24,800 --> 00:12:30,639 the hardware 290 00:12:26,639 --> 00:12:33,279 starting from the early 2010s the clock 291 00:12:30,639 --> 00:12:34,800 began ticking for display the old 292 00:12:33,279 --> 00:12:37,519 display server technology available on 293 00:12:34,800 --> 00:12:40,160 linux which is x11 294 00:12:37,519 --> 00:12:42,160 over the years toolkits have moved away 295 00:12:40,160 --> 00:12:43,360 from submitting rendering commands to a 296 00:12:42,160 --> 00:12:45,600 server 297 00:12:43,360 --> 00:12:49,279 and instead they started to send 298 00:12:45,600 --> 00:12:52,240 complete frames generated client side 299 00:12:49,279 --> 00:12:54,320 the x server usually stood in the way of 300 00:12:52,240 --> 00:12:57,200 making applications reliably present 301 00:12:54,320 --> 00:12:58,480 windows to the users for years 302 00:12:57,200 --> 00:13:01,360 um 303 00:12:58,480 --> 00:13:03,760 even though we introduced uh well not me 304 00:13:01,360 --> 00:13:06,320 personally but the x11 developers 305 00:13:03,760 --> 00:13:08,560 introduce extensions like the composite 306 00:13:06,320 --> 00:13:10,000 extension 307 00:13:08,560 --> 00:13:12,240 weyland 308 00:13:10,000 --> 00:13:14,880 as a display server technology promised 309 00:13:12,240 --> 00:13:18,480 to make every frame of painting with no 310 00:13:14,880 --> 00:13:21,200 interference by the display server 311 00:13:18,480 --> 00:13:23,600 sadly gtk 3 312 00:13:21,200 --> 00:13:25,839 just like gtk2 was still very much 313 00:13:23,600 --> 00:13:28,800 designed on top of xlib which meant that 314 00:13:25,839 --> 00:13:31,519 every one of its back ends 315 00:13:28,800 --> 00:13:34,800 was re-implementing the same xlib design 316 00:13:31,519 --> 00:13:36,959 on other windowing system and gdk 317 00:13:34,800 --> 00:13:38,880 exposed a lot of ostensibly independent 318 00:13:36,959 --> 00:13:41,519 api that 319 00:13:38,880 --> 00:13:44,399 only ever made sense or even worked when 320 00:13:41,519 --> 00:13:44,399 using x11 321 00:13:47,440 --> 00:13:52,880 in terms of portability as i was saying 322 00:13:50,000 --> 00:13:54,560 gdk basically re-implemented xlib on 323 00:13:52,880 --> 00:13:56,240 every single platform 324 00:13:54,560 --> 00:13:59,680 um since the 325 00:13:56,240 --> 00:14:02,639 gtk 2.0 release in 2001. 326 00:13:59,680 --> 00:14:05,519 uh the ability to 327 00:14:02,639 --> 00:14:07,360 run a gdk application on different 328 00:14:05,519 --> 00:14:09,360 platforms and different environments was 329 00:14:07,360 --> 00:14:11,199 never meant to be used at ways to do 330 00:14:09,360 --> 00:14:13,839 like cross-platform 331 00:14:11,199 --> 00:14:16,560 write once run anywhere development 332 00:14:13,839 --> 00:14:17,839 it was a way to port gtk applications 333 00:14:16,560 --> 00:14:20,639 from linux 334 00:14:17,839 --> 00:14:23,760 and other unix-like systems to windows 335 00:14:20,639 --> 00:14:23,760 and mac os 336 00:14:24,639 --> 00:14:27,760 and 337 00:14:25,600 --> 00:14:29,440 as i said i was saying this amounted for 338 00:14:27,760 --> 00:14:31,839 implementing x11 339 00:14:29,440 --> 00:14:31,839 everywhere 340 00:14:32,000 --> 00:14:36,800 while this minimized the changes to 341 00:14:33,920 --> 00:14:39,040 application code because after all 342 00:14:36,800 --> 00:14:41,519 everything looked like x 343 00:14:39,040 --> 00:14:44,800 it made everything more complicated to 344 00:14:41,519 --> 00:14:46,079 maintain and to fix and to test inside 345 00:14:44,800 --> 00:14:47,839 the toolkit 346 00:14:46,079 --> 00:14:51,120 every new functionality will need to be 347 00:14:47,839 --> 00:14:54,079 obstructed in ways that didn't always 348 00:14:51,120 --> 00:14:56,320 make sense or they would be just left 349 00:14:54,079 --> 00:14:58,480 unimplemented 350 00:14:56,320 --> 00:15:00,160 plus very very few people could 351 00:14:58,480 --> 00:15:02,399 understand how the back ends actually 352 00:15:00,160 --> 00:15:05,360 worked a simpler windowing system 353 00:15:02,399 --> 00:15:08,880 protocol like weyland would fit in a lot 354 00:15:05,360 --> 00:15:08,880 better within these constraints 355 00:15:11,440 --> 00:15:17,279 so we come to 2016 and the internal 356 00:15:14,959 --> 00:15:19,279 changes that happened during the gtk 3 357 00:15:17,279 --> 00:15:22,160 cycle um 358 00:15:19,279 --> 00:15:22,160 basically just 359 00:15:22,720 --> 00:15:25,360 were not 360 00:15:24,160 --> 00:15:27,760 really 361 00:15:25,360 --> 00:15:30,079 for free anymore 362 00:15:27,760 --> 00:15:33,279 of course most people only remember the 363 00:15:30,079 --> 00:15:35,120 theming issues at the time um 364 00:15:33,279 --> 00:15:37,920 themes which were never under any 365 00:15:35,120 --> 00:15:40,000 stability guarantee the 366 00:15:37,920 --> 00:15:42,880 issues were mostly the result of 367 00:15:40,000 --> 00:15:44,720 downstream distributions of themes 368 00:15:42,880 --> 00:15:46,959 as packages 369 00:15:44,720 --> 00:15:48,880 without any additional qa process that 370 00:15:46,959 --> 00:15:51,519 would tie them to release of the toolkit 371 00:15:48,880 --> 00:15:53,519 they were ostensibly targeting 372 00:15:51,519 --> 00:15:55,360 so people got broken 373 00:15:53,519 --> 00:15:57,120 desktops because they were using a theme 374 00:15:55,360 --> 00:15:59,199 that was not tested with a version of 375 00:15:57,120 --> 00:16:02,720 gtk they was 376 00:15:59,199 --> 00:16:04,240 in theory using 377 00:16:02,720 --> 00:16:05,519 the main impact for application 378 00:16:04,240 --> 00:16:06,560 developers 379 00:16:05,519 --> 00:16:08,480 were not 380 00:16:06,560 --> 00:16:10,160 themes where the changes in the drawing 381 00:16:08,480 --> 00:16:13,279 api especially for applications 382 00:16:10,160 --> 00:16:16,480 supported in the early days of gtk3 383 00:16:13,279 --> 00:16:19,120 uh to avoid that happening again uh just 384 00:16:16,480 --> 00:16:21,120 before of the gtk4 development process 385 00:16:19,120 --> 00:16:24,639 we decided to lay down some fundamental 386 00:16:21,120 --> 00:16:26,720 guarantees for application developers 387 00:16:24,639 --> 00:16:28,639 first and foremost that once the 4.0 388 00:16:26,720 --> 00:16:30,160 release was done the toolkit would be 389 00:16:28,639 --> 00:16:32,079 feature frozen 390 00:16:30,160 --> 00:16:34,000 new api and new features could be added 391 00:16:32,079 --> 00:16:36,160 of course but existing functionality 392 00:16:34,000 --> 00:16:37,680 would never change including the css 393 00:16:36,160 --> 00:16:39,680 selectors 394 00:16:37,680 --> 00:16:42,560 so it's a little bit more strong than an 395 00:16:39,680 --> 00:16:44,320 avia api compatibility 396 00:16:42,560 --> 00:16:46,720 additionally the new development cycle 397 00:16:44,320 --> 00:16:48,000 will contain a roadmap for future major 398 00:16:46,720 --> 00:16:49,680 api work 399 00:16:48,000 --> 00:16:52,560 as well as the support window for 400 00:16:49,680 --> 00:16:54,399 existing stable releases to shorten the 401 00:16:52,560 --> 00:16:57,440 development cycle while providing a 402 00:16:54,399 --> 00:16:57,440 reliable schedule 403 00:16:58,399 --> 00:17:02,560 so 404 00:16:59,759 --> 00:17:06,240 feature-free is one stable 405 00:17:02,560 --> 00:17:08,400 just adding small widgets 406 00:17:06,240 --> 00:17:10,480 uh freeze the theme 407 00:17:08,400 --> 00:17:14,640 shorter api cycles 408 00:17:10,480 --> 00:17:19,280 and to support the api versions um for 409 00:17:14,640 --> 00:17:21,520 a window of to support the api versions 410 00:17:19,280 --> 00:17:22,880 so this is kind of a 411 00:17:21,520 --> 00:17:25,839 graph of 412 00:17:22,880 --> 00:17:28,559 our policy you can see that we have the 413 00:17:25,839 --> 00:17:32,559 gtk3 branch that goes on 414 00:17:28,559 --> 00:17:35,200 um it was we had to release gdk320 415 00:17:32,559 --> 00:17:37,360 to um 416 00:17:35,200 --> 00:17:41,280 ease off the porting window but 417 00:17:37,360 --> 00:17:43,919 basically from 324 we jumped to the 390 418 00:17:41,280 --> 00:17:46,160 development process release four 419 00:17:43,919 --> 00:17:49,200 and then from four we're gonna release 420 00:17:46,160 --> 00:17:50,799 we're gonna start the 490 development 421 00:17:49,200 --> 00:17:54,400 cycle in 422 00:17:50,799 --> 00:17:55,600 uh probably three years time 423 00:17:54,400 --> 00:17:58,000 but as 424 00:17:55,600 --> 00:18:00,240 as soon as gtk 425 00:17:58,000 --> 00:18:02,559 5 is going to be released gtk3 is going 426 00:18:00,240 --> 00:18:04,320 to be end of life and 427 00:18:02,559 --> 00:18:06,400 the only 428 00:18:04,320 --> 00:18:09,120 two supported stable release 429 00:18:06,400 --> 00:18:12,240 versions will be gta 4 and gta 5 430 00:18:09,120 --> 00:18:15,360 and then when gtk 6 is released gta 4 431 00:18:12,240 --> 00:18:17,039 will be end of live so it's much more 432 00:18:15,360 --> 00:18:18,320 explicit 433 00:18:17,039 --> 00:18:19,840 instead of 434 00:18:18,320 --> 00:18:22,799 just being random 435 00:18:19,840 --> 00:18:22,799 whatever we want 436 00:18:25,200 --> 00:18:31,760 so in terms of gtk 437 00:18:28,720 --> 00:18:34,400 internal and api design 438 00:18:31,760 --> 00:18:36,559 the version the major version number 439 00:18:34,400 --> 00:18:38,799 three was still heavily influenced by 440 00:18:36,559 --> 00:18:40,559 the model of a deep object-oriented 441 00:18:38,799 --> 00:18:42,480 forest of types 442 00:18:40,559 --> 00:18:45,120 this design encouraged developers to 443 00:18:42,480 --> 00:18:46,880 inherit from existing complex widgets 444 00:18:45,120 --> 00:18:49,120 which add the side effect of locking 445 00:18:46,880 --> 00:18:51,200 some internal state to avoid breaking 446 00:18:49,120 --> 00:18:53,360 expectations 447 00:18:51,200 --> 00:18:55,520 for gdk4 instead the design mantra has 448 00:18:53,360 --> 00:18:57,520 been to favor composition and delegation 449 00:18:55,520 --> 00:18:59,200 instead of inheritance 450 00:18:57,520 --> 00:19:00,960 we made it easier to create your own 451 00:18:59,200 --> 00:19:03,440 custom composite widgets without 452 00:19:00,960 --> 00:19:05,919 exposing their internals 453 00:19:03,440 --> 00:19:08,400 you can do that with object orientation 454 00:19:05,919 --> 00:19:10,799 and use xml 455 00:19:08,400 --> 00:19:14,240 to describe your ui and 456 00:19:10,799 --> 00:19:15,919 bind it to the uh class structure 457 00:19:14,240 --> 00:19:16,799 automatically so you don't have to deal 458 00:19:15,919 --> 00:19:20,240 with 459 00:19:16,799 --> 00:19:23,440 uh the fiddly bits of um 460 00:19:20,240 --> 00:19:25,600 loading uh uh loading xml yourself and 461 00:19:23,440 --> 00:19:28,080 then assigning pointers and stuff like 462 00:19:25,600 --> 00:19:30,400 that there are a bunch of macros and a 463 00:19:28,080 --> 00:19:32,799 bunch of api that will deal with that 464 00:19:30,400 --> 00:19:32,799 for you 465 00:19:35,520 --> 00:19:39,120 um 466 00:19:36,400 --> 00:19:42,799 another thing that we looked at a little 467 00:19:39,120 --> 00:19:45,520 bit later than we wanted but it was hard 468 00:19:42,799 --> 00:19:47,520 to find uh resources and funding for 469 00:19:45,520 --> 00:19:50,880 that sadly 470 00:19:47,520 --> 00:19:52,480 um was accessibility 471 00:19:50,880 --> 00:19:55,919 like 472 00:19:52,480 --> 00:19:59,039 prometheus gifting humans with the uh 473 00:19:55,919 --> 00:20:00,799 with fire the sans accessibility team 474 00:19:59,039 --> 00:20:04,480 gifted the free and open source software 475 00:20:00,799 --> 00:20:06,799 world with 80 spy back in 2000 2000 476 00:20:04,480 --> 00:20:08,559 2001. 477 00:20:06,799 --> 00:20:11,120 and 478 00:20:08,559 --> 00:20:12,960 alongside it is by gtk acquire all 479 00:20:11,120 --> 00:20:15,760 accessibility api 480 00:20:12,960 --> 00:20:19,120 first as an out of three model 481 00:20:15,760 --> 00:20:19,120 because of dependencies 482 00:20:19,520 --> 00:20:24,000 the legacy of that gift 483 00:20:21,919 --> 00:20:26,080 made things much more complicated over 484 00:20:24,000 --> 00:20:28,400 the following 20 years 485 00:20:26,080 --> 00:20:29,520 the original design was heavily based on 486 00:20:28,400 --> 00:20:32,240 corba 487 00:20:29,520 --> 00:20:35,120 which is many things but a nimble ipc 488 00:20:32,240 --> 00:20:36,880 mechanism isn't one of them 489 00:20:35,120 --> 00:20:39,360 additionally the accessibility stack was 490 00:20:36,880 --> 00:20:42,080 heavily tied to x11 with application 491 00:20:39,360 --> 00:20:44,080 broadcasting the old internal state 492 00:20:42,080 --> 00:20:45,200 and allowing other applications to take 493 00:20:44,080 --> 00:20:48,480 them over 494 00:20:45,200 --> 00:20:51,280 on unsecured sockets 495 00:20:48,480 --> 00:20:52,799 and unprivileged assistive technologies 496 00:20:51,280 --> 00:20:55,039 were able to 497 00:20:52,799 --> 00:20:58,159 get and inject windowing system events 498 00:20:55,039 --> 00:21:00,320 across the whole desktop 499 00:20:58,159 --> 00:21:02,480 this design also by layering the api 500 00:21:00,320 --> 00:21:04,320 across multiple components you add the 501 00:21:02,480 --> 00:21:06,960 toolkit 502 00:21:04,320 --> 00:21:09,840 with which provide an implementation 503 00:21:06,960 --> 00:21:11,840 then you add the set of abstract types 504 00:21:09,840 --> 00:21:14,000 as a separate library 505 00:21:11,840 --> 00:21:15,520 since it they could be theoretically 506 00:21:14,000 --> 00:21:18,960 implemented by multiple toolkits and 507 00:21:15,520 --> 00:21:21,440 libraries except it never happened 508 00:21:18,960 --> 00:21:21,440 well if you 509 00:21:21,760 --> 00:21:25,520 yeah it never actually happened 510 00:21:26,080 --> 00:21:30,000 and 511 00:21:27,760 --> 00:21:33,120 on the other side you had the actual low 512 00:21:30,000 --> 00:21:36,000 level library that sat at both ends of 513 00:21:33,120 --> 00:21:39,440 the ipc wire 514 00:21:36,000 --> 00:21:42,080 on top of that there were there was 515 00:21:39,440 --> 00:21:44,320 sun scaling down the accessibility theme 516 00:21:42,080 --> 00:21:46,640 oracle acquiring sun and basically 517 00:21:44,320 --> 00:21:49,679 killing the entire thing 518 00:21:46,640 --> 00:21:52,080 um and the pool of people working on 519 00:21:49,679 --> 00:21:54,960 making the linux desktop accessible to 520 00:21:52,080 --> 00:21:57,200 people with disabilities 521 00:21:54,960 --> 00:22:00,159 yeah 522 00:21:57,200 --> 00:22:02,799 it got smaller and smaller um 523 00:22:00,159 --> 00:22:04,799 the more time passed 524 00:22:02,799 --> 00:22:07,120 in the meantime web browsers are where 525 00:22:04,799 --> 00:22:08,640 the action is these days which meant 526 00:22:07,120 --> 00:22:11,919 having a whole new accessibility 527 00:22:08,640 --> 00:22:14,640 specification to follow the w3c aria 528 00:22:11,919 --> 00:22:14,640 specification 529 00:22:15,919 --> 00:22:22,080 so for gtk4 we decided to follow that 530 00:22:19,280 --> 00:22:23,760 instead of to eliminate all the layers 531 00:22:22,080 --> 00:22:26,880 uh and just 532 00:22:23,760 --> 00:22:28,159 speak the 80 spy protocol directly and 533 00:22:26,880 --> 00:22:30,799 implement 534 00:22:28,159 --> 00:22:35,200 from an api perspective the 535 00:22:30,799 --> 00:22:35,200 w3c specification for accessibility 536 00:22:38,080 --> 00:22:44,159 so what's new in gdk4 537 00:22:42,080 --> 00:22:46,320 we have a new deferred mode rendering 538 00:22:44,159 --> 00:22:48,480 infrastructure uh instead of being an 539 00:22:46,320 --> 00:22:50,159 immediate mode with cairo so you don't 540 00:22:48,480 --> 00:22:52,640 submit you don't draw directly you 541 00:22:50,159 --> 00:22:54,880 submit rendering commands and then gtk 542 00:22:52,640 --> 00:22:56,960 will take them and 543 00:22:54,880 --> 00:22:59,120 structure them in ways that make more 544 00:22:56,960 --> 00:23:01,360 sense 545 00:22:59,120 --> 00:23:02,480 we use opengl by default and cairo is a 546 00:23:01,360 --> 00:23:04,240 fallback 547 00:23:02,480 --> 00:23:07,520 we use weyland by default even the 548 00:23:04,240 --> 00:23:11,200 design of the api is based on weyland 549 00:23:07,520 --> 00:23:13,039 we have much more simpler backends 550 00:23:11,200 --> 00:23:16,640 so they are easy to 551 00:23:13,039 --> 00:23:18,880 test fix and maintain 552 00:23:16,640 --> 00:23:22,640 we have a reliable release policy and a 553 00:23:18,880 --> 00:23:25,600 stable feature set for every single 554 00:23:22,640 --> 00:23:27,600 new major release of gtk 555 00:23:25,600 --> 00:23:29,280 we use delegation instead of inheritance 556 00:23:27,600 --> 00:23:32,159 making the 557 00:23:29,280 --> 00:23:36,520 api more reliable 558 00:23:32,159 --> 00:23:36,520 and we have a new accessibility api 559 00:23:36,880 --> 00:23:41,520 of course we also have to document all 560 00:23:39,039 --> 00:23:41,520 this stuff 561 00:23:41,840 --> 00:23:46,159 gdk 562 00:23:43,440 --> 00:23:49,440 started off in 1997 563 00:23:46,159 --> 00:23:51,200 with um handwritten tech info pages for 564 00:23:49,440 --> 00:23:52,480 the api reference 565 00:23:51,200 --> 00:23:54,240 and then 566 00:23:52,480 --> 00:23:56,880 the project was migrated to a custom 567 00:23:54,240 --> 00:23:58,960 documentation generator that would take 568 00:23:56,880 --> 00:24:03,039 comments from the source code and turn 569 00:23:58,960 --> 00:24:05,440 them into dot book xml first and then 570 00:24:03,039 --> 00:24:08,559 that turned into html 571 00:24:05,440 --> 00:24:10,880 uh the tool was called gtk doc and it 572 00:24:08,559 --> 00:24:13,279 served the gnome project as all well 573 00:24:10,880 --> 00:24:15,760 enough to be reused for all other 574 00:24:13,279 --> 00:24:18,240 libraries 575 00:24:15,760 --> 00:24:20,080 sadly gtk dock was written in pearl and 576 00:24:18,240 --> 00:24:22,320 its maintenance cost 577 00:24:20,080 --> 00:24:24,240 kind of followed the curve of every 578 00:24:22,320 --> 00:24:26,640 other pearl 579 00:24:24,240 --> 00:24:29,279 project 580 00:24:26,640 --> 00:24:31,039 and at some point since pearl 581 00:24:29,279 --> 00:24:34,720 fell from grace 582 00:24:31,039 --> 00:24:36,720 it got progressively less maintained 583 00:24:34,720 --> 00:24:38,559 there was a last-ditch attempt to port 584 00:24:36,720 --> 00:24:41,120 gtk dr python 585 00:24:38,559 --> 00:24:43,520 as well as trying to reduce the dog 586 00:24:41,120 --> 00:24:45,279 books performance bottleneck 587 00:24:43,520 --> 00:24:47,039 but 588 00:24:45,279 --> 00:24:48,720 basically building the api reference for 589 00:24:47,039 --> 00:24:51,039 gtk took 590 00:24:48,720 --> 00:24:51,919 as much as building the actual toolkit 591 00:24:51,039 --> 00:24:54,559 so 592 00:24:51,919 --> 00:24:57,919 500 000 lines of c 593 00:24:54,559 --> 00:25:01,760 uh plus examples plus demos 594 00:24:57,919 --> 00:25:02,720 uh on our ci pipeline take about 595 00:25:01,760 --> 00:25:04,640 um 596 00:25:02,720 --> 00:25:06,880 six to seven minutes 597 00:25:04,640 --> 00:25:10,799 and generating documentation for that 598 00:25:06,880 --> 00:25:14,600 took the exact same amount of time 599 00:25:10,799 --> 00:25:14,600 uh it was untenable 600 00:25:15,520 --> 00:25:19,520 in the meantime though 601 00:25:17,360 --> 00:25:22,080 since 2010-ish 602 00:25:19,520 --> 00:25:24,320 every gnome library started providing a 603 00:25:22,080 --> 00:25:25,520 machine-readable description of its c 604 00:25:24,320 --> 00:25:28,159 api 605 00:25:25,520 --> 00:25:29,440 as well as the documentation for the for 606 00:25:28,159 --> 00:25:32,159 that api 607 00:25:29,440 --> 00:25:34,480 in form of introspection data generated 608 00:25:32,159 --> 00:25:36,159 at build time 609 00:25:34,480 --> 00:25:37,919 the typical consumer of this data 610 00:25:36,159 --> 00:25:40,320 language bindings 611 00:25:37,919 --> 00:25:42,880 they can use it both at runtime as a 612 00:25:40,320 --> 00:25:44,799 memory mappable binary blob 613 00:25:42,880 --> 00:25:49,120 and they can also use 614 00:25:44,799 --> 00:25:49,120 an xml description for code generation 615 00:25:50,159 --> 00:25:54,159 the xml description contains the 616 00:25:51,919 --> 00:25:56,960 documentation associated to every public 617 00:25:54,159 --> 00:26:00,720 type and symbols and it's possible to 618 00:25:56,960 --> 00:26:04,000 use it to generate an api reference 619 00:26:00,720 --> 00:26:04,000 much more efficiently 620 00:26:04,159 --> 00:26:07,679 the 621 00:26:05,840 --> 00:26:09,520 it also has another advantage of using 622 00:26:07,679 --> 00:26:12,320 the introspection data 623 00:26:09,520 --> 00:26:14,960 the generated api will match as much as 624 00:26:12,320 --> 00:26:15,840 possible the actual api that will be 625 00:26:14,960 --> 00:26:17,520 used 626 00:26:15,840 --> 00:26:18,960 by the 627 00:26:17,520 --> 00:26:21,600 language bindings 628 00:26:18,960 --> 00:26:23,600 so you you'll get something that is a 629 00:26:21,600 --> 00:26:26,640 lot 630 00:26:23,600 --> 00:26:29,679 easier to map between 631 00:26:26,640 --> 00:26:29,679 programming languages 632 00:26:32,000 --> 00:26:35,520 so 633 00:26:33,039 --> 00:26:36,640 i wrote this tool called gi doctrine 634 00:26:35,520 --> 00:26:39,120 which take the introspection 635 00:26:36,640 --> 00:26:42,240 documentation and the introspection data 636 00:26:39,120 --> 00:26:46,480 and generates the documentation and and 637 00:26:42,240 --> 00:26:46,480 creates an uh html website 638 00:26:47,919 --> 00:26:52,000 it's 639 00:26:49,360 --> 00:26:54,720 really fast it takes about a minute to 640 00:26:52,000 --> 00:26:55,600 build the entire thing 641 00:26:54,720 --> 00:26:58,320 and 642 00:26:55,600 --> 00:26:59,600 we publish it as part of our ci pipeline 643 00:26:58,320 --> 00:27:03,360 alongside the 644 00:26:59,600 --> 00:27:06,720 reference for other libraries so gtk 645 00:27:03,360 --> 00:27:08,799 gio pango for text gdk big spot for 646 00:27:06,720 --> 00:27:10,880 image loading 647 00:27:08,799 --> 00:27:14,320 it has stable links 648 00:27:10,880 --> 00:27:16,799 it allows cross linking of symbols using 649 00:27:14,320 --> 00:27:19,440 javascript so you can 650 00:27:16,799 --> 00:27:20,480 tweak the cross linking for the remote 651 00:27:19,440 --> 00:27:21,440 and the local 652 00:27:20,480 --> 00:27:24,320 case 653 00:27:21,440 --> 00:27:26,159 and it makes it easier to update to fix 654 00:27:24,320 --> 00:27:29,039 the documentation because every single 655 00:27:26,159 --> 00:27:31,120 type and every single symbol has a link 656 00:27:29,039 --> 00:27:33,120 to the source code 657 00:27:31,120 --> 00:27:35,679 that defines it so you can literally 658 00:27:33,120 --> 00:27:39,200 jump into the gitlab web ui 659 00:27:35,679 --> 00:27:42,320 and then edit the documentation um 660 00:27:39,200 --> 00:27:44,960 straight from the web browser 661 00:27:42,320 --> 00:27:46,799 uh it also has 662 00:27:44,960 --> 00:27:49,039 client-side searches 663 00:27:46,799 --> 00:27:50,399 on an index that is generated at build 664 00:27:49,039 --> 00:27:51,120 time as well 665 00:27:50,399 --> 00:27:53,919 so 666 00:27:51,120 --> 00:27:57,440 uh you never send your queries to i 667 00:27:53,919 --> 00:27:57,440 don't know google or whatever else 668 00:27:59,760 --> 00:28:04,640 on top of that we also revamped the gta 669 00:28:02,640 --> 00:28:07,120 well i say we i revamped the gtk 670 00:28:04,640 --> 00:28:08,159 documentation website the gnome 671 00:28:07,120 --> 00:28:10,960 developer 672 00:28:08,159 --> 00:28:12,960 documentation there 673 00:28:10,960 --> 00:28:14,320 it's been rebuilt from scratch 674 00:28:12,960 --> 00:28:16,480 we moved from 675 00:28:14,320 --> 00:28:18,559 python to django 676 00:28:16,480 --> 00:28:19,840 kind of haddock uh 677 00:28:18,559 --> 00:28:23,919 application 678 00:28:19,840 --> 00:28:26,799 that literally took html out of the 679 00:28:23,919 --> 00:28:28,240 release tarbles and instead we switched 680 00:28:26,799 --> 00:28:29,440 to 681 00:28:28,240 --> 00:28:31,919 sphinx 682 00:28:29,440 --> 00:28:34,559 which is a python 683 00:28:31,919 --> 00:28:36,880 documentation generator 684 00:28:34,559 --> 00:28:39,200 this lets us do things like 685 00:28:36,880 --> 00:28:41,840 cross-linking automatically 686 00:28:39,200 --> 00:28:43,120 searches and everything else 687 00:28:41,840 --> 00:28:45,039 it's um 688 00:28:43,120 --> 00:28:47,679 also a lot easier to build the 689 00:28:45,039 --> 00:28:50,399 documentation locally and test it before 690 00:28:47,679 --> 00:28:52,720 sending it to gitlab for a merge request 691 00:28:50,399 --> 00:28:54,640 and then we use gitlab 692 00:28:52,720 --> 00:28:57,360 this is the gitlab ci pipeline to 693 00:28:54,640 --> 00:29:00,000 generate the entire documentation and 694 00:28:57,360 --> 00:29:02,720 website and publishing it 695 00:29:00,000 --> 00:29:05,120 so it's a lot easier to contribute there 696 00:29:02,720 --> 00:29:05,120 as well 697 00:29:07,760 --> 00:29:12,080 and outside of the content of the 698 00:29:09,760 --> 00:29:13,120 developer documentation we also added 699 00:29:12,080 --> 00:29:16,960 new 700 00:29:13,120 --> 00:29:20,960 from the old set of tutorials that were 701 00:29:16,960 --> 00:29:23,840 kind of out of date most of the time 702 00:29:20,960 --> 00:29:25,919 we added them to we added more content 703 00:29:23,840 --> 00:29:28,799 there and we also adding beginners 704 00:29:25,919 --> 00:29:32,960 tutorials to go from the human interface 705 00:29:28,799 --> 00:29:35,600 guidelines to the api references 706 00:29:32,960 --> 00:29:39,039 and speaking of interface guidelines 707 00:29:35,600 --> 00:29:41,520 the same website all hosts them 708 00:29:39,039 --> 00:29:43,760 and they are generated using the same 709 00:29:41,520 --> 00:29:43,760 tool 710 00:29:45,840 --> 00:29:55,000 so what happened in 711 00:29:48,720 --> 00:29:55,000 this last year from december 2020 to now 712 00:29:56,480 --> 00:30:01,840 we work on stabilization the main goal 713 00:29:58,559 --> 00:30:03,520 of gdk now becomes bug fixing and 714 00:30:01,840 --> 00:30:05,279 handling feedback from application 715 00:30:03,520 --> 00:30:09,120 developers that are currently porting 716 00:30:05,279 --> 00:30:12,240 their applications to gtk4 from gtk3 or 717 00:30:09,120 --> 00:30:12,240 even from gtk2 718 00:30:13,600 --> 00:30:18,000 but also we want to ensure that gtk4 can 719 00:30:16,480 --> 00:30:19,679 be used by virus environments and 720 00:30:18,000 --> 00:30:22,640 platforms so it's possible to easily 721 00:30:19,679 --> 00:30:24,559 port applications between them we have 722 00:30:22,640 --> 00:30:26,880 aggressively simplified improve our 723 00:30:24,559 --> 00:30:29,279 build system thanks to mison and it's 724 00:30:26,880 --> 00:30:31,679 possible to go from cloning just the gtk 725 00:30:29,279 --> 00:30:34,480 repository to a full build including the 726 00:30:31,679 --> 00:30:37,039 library dependencies on both mac os and 727 00:30:34,480 --> 00:30:38,960 windows and we test that on our ci 728 00:30:37,039 --> 00:30:40,240 pipeline 729 00:30:38,960 --> 00:30:42,880 there are still some issues here and 730 00:30:40,240 --> 00:30:45,679 there especially some core dependencies 731 00:30:42,880 --> 00:30:50,279 on macos but we are much more confident 732 00:30:45,679 --> 00:30:50,279 about the state of the toolkit there 733 00:30:50,559 --> 00:30:54,640 um 734 00:30:51,679 --> 00:30:56,880 the ci pipeline for windows also 735 00:30:54,640 --> 00:31:01,120 um we have two pipelines for windows one 736 00:30:56,880 --> 00:31:03,440 using msys2 so using a gcc tool chain 737 00:31:01,120 --> 00:31:06,320 and then we have a 738 00:31:03,440 --> 00:31:08,799 microsoft uh visual c 739 00:31:06,320 --> 00:31:13,039 uh native tool chain 740 00:31:08,799 --> 00:31:14,000 and then we generate the dlls as um 741 00:31:13,039 --> 00:31:16,480 uh 742 00:31:14,000 --> 00:31:19,039 build artifacts so people can literally 743 00:31:16,480 --> 00:31:22,640 download them from uh for a merger quest 744 00:31:19,039 --> 00:31:24,320 to test if the fix was um 745 00:31:22,640 --> 00:31:26,399 was correct 746 00:31:24,320 --> 00:31:28,880 without having to rebuild the library 747 00:31:26,399 --> 00:31:28,880 locally 748 00:31:29,279 --> 00:31:32,480 but another thing that we kind of worked 749 00:31:31,120 --> 00:31:34,640 on is 750 00:31:32,480 --> 00:31:36,480 trying to make it easier to write 751 00:31:34,640 --> 00:31:38,559 platform libraries 752 00:31:36,480 --> 00:31:41,039 since gtk is used by multiple 753 00:31:38,559 --> 00:31:43,039 environments as a foundational toolkit 754 00:31:41,039 --> 00:31:44,960 we wanted to make it more environment 755 00:31:43,039 --> 00:31:47,919 agnostic 756 00:31:44,960 --> 00:31:50,559 elementary xfc are based on gtk and they 757 00:31:47,919 --> 00:31:53,600 provide their own platform libraries for 758 00:31:50,559 --> 00:31:55,840 writing integrated applications 759 00:31:53,600 --> 00:31:58,080 by making gtk less beholden to gnome 760 00:31:55,840 --> 00:31:59,440 design patterns those libraries can now 761 00:31:58,080 --> 00:32:01,120 avoid 762 00:31:59,440 --> 00:32:03,679 undoing 763 00:32:01,120 --> 00:32:05,679 some of the token internal state 764 00:32:03,679 --> 00:32:08,880 or write completely custom widgets to 765 00:32:05,679 --> 00:32:08,880 replace gdk zone 766 00:32:09,600 --> 00:32:16,799 and since gnome is still based on gtk 767 00:32:12,840 --> 00:32:20,320 and it needs a way to implement 768 00:32:16,799 --> 00:32:23,519 its own ui design patterns for their own 769 00:32:20,320 --> 00:32:23,519 for its own applications 770 00:32:24,880 --> 00:32:30,000 we worked on a library called libadvita 771 00:32:27,760 --> 00:32:32,480 which implements the 772 00:32:30,000 --> 00:32:34,799 gnome interface guideline patterns and 773 00:32:32,480 --> 00:32:38,640 widgets 774 00:32:34,799 --> 00:32:38,640 it will also follow the gnome 775 00:32:39,360 --> 00:32:44,799 schedule essentially so it will 776 00:32:42,399 --> 00:32:46,480 cycle through api a little bit faster 777 00:32:44,799 --> 00:32:47,360 than gdk 778 00:32:46,480 --> 00:32:49,519 um 779 00:32:47,360 --> 00:32:50,559 but also theme changes and things like 780 00:32:49,519 --> 00:32:53,519 that 781 00:32:50,559 --> 00:32:57,640 not every six months but it has uh 782 00:32:53,519 --> 00:32:57,640 definitely a shorter lifetime 783 00:32:58,399 --> 00:33:03,039 uh libat waiter was recently released 784 00:33:00,960 --> 00:33:07,519 libavita 1.0 was recently released 785 00:33:03,039 --> 00:33:10,559 alongside gtk 4.6 and will be available 786 00:33:07,519 --> 00:33:12,960 with gnome 42 when drum 42 is released 787 00:33:10,559 --> 00:33:12,960 in march 788 00:33:14,720 --> 00:33:20,559 so i have a few 789 00:33:18,159 --> 00:33:24,799 resources here 790 00:33:20,559 --> 00:33:28,320 this is the gtk documentation website 791 00:33:24,799 --> 00:33:31,200 and the new developer dot num.org for 792 00:33:28,320 --> 00:33:34,720 the developers documentation 793 00:33:31,200 --> 00:33:35,919 this is the api reference for libadvita 794 00:33:34,720 --> 00:33:39,120 as you can see 795 00:33:35,919 --> 00:33:40,240 most of these apis will are 796 00:33:39,120 --> 00:33:42,159 generated 797 00:33:40,240 --> 00:33:45,279 on git lab using the ci pipeline so 798 00:33:42,159 --> 00:33:45,279 they're always up to date 799 00:33:46,320 --> 00:33:51,600 the job gene introspection documentation 800 00:33:49,519 --> 00:33:53,919 and the documentation for the 801 00:33:51,600 --> 00:33:56,080 documentation generator using job j 802 00:33:53,919 --> 00:33:57,840 introspection 803 00:33:56,080 --> 00:33:59,279 and also we have the gtk development 804 00:33:57,840 --> 00:34:02,080 blog where we 805 00:33:59,279 --> 00:34:02,080 try to 806 00:34:02,480 --> 00:34:06,720 explain some of the internals of the 807 00:34:04,240 --> 00:34:09,839 toolkit and outline changes in the 808 00:34:06,720 --> 00:34:13,119 toolkit that are coming or 809 00:34:09,839 --> 00:34:13,119 they that are planned 810 00:34:13,200 --> 00:34:18,960 and we also have a discourse instance so 811 00:34:15,679 --> 00:34:24,159 you can talk to us without having to 812 00:34:18,960 --> 00:34:24,159 open random bugs on on gitlab and then 813 00:34:24,240 --> 00:34:28,480 filling up the 814 00:34:25,679 --> 00:34:28,480 issue tracker 815 00:34:30,480 --> 00:34:34,480 you can follow me on twitter 816 00:34:33,040 --> 00:34:36,000 and on twitch 817 00:34:34,480 --> 00:34:38,639 on twitch i do 818 00:34:36,000 --> 00:34:40,000 regular streaming where i 819 00:34:38,639 --> 00:34:42,560 document i 820 00:34:40,000 --> 00:34:45,200 either write documentation 821 00:34:42,560 --> 00:34:47,280 like the beginner's tutorials for the 822 00:34:45,200 --> 00:34:50,879 gnome developer documentation 823 00:34:47,280 --> 00:34:50,879 or i work on gtk 824 00:34:51,359 --> 00:34:56,639 so i guess 825 00:34:53,839 --> 00:34:59,680 it's time for me to thank you 826 00:34:56,639 --> 00:35:01,200 and thanks uh the lca organization for 827 00:34:59,680 --> 00:35:03,920 having me again 828 00:35:01,200 --> 00:35:05,760 to talk to you about gdk 829 00:35:03,920 --> 00:35:08,400 and i guess if you have any questions 830 00:35:05,760 --> 00:35:10,800 now would be the time 831 00:35:08,400 --> 00:35:14,079 thank you emmanuel that was like a 832 00:35:10,800 --> 00:35:15,200 really interesting behind the scenes 833 00:35:14,079 --> 00:35:17,920 look into 834 00:35:15,200 --> 00:35:19,839 gtk and what's been going on and um i 835 00:35:17,920 --> 00:35:22,880 appreciated the history 836 00:35:19,839 --> 00:35:24,720 lesson as well like i mean i i 837 00:35:22,880 --> 00:35:25,440 obviously um 838 00:35:24,720 --> 00:35:26,800 i 839 00:35:25,440 --> 00:35:28,720 i used 840 00:35:26,800 --> 00:35:30,720 just had a pronunciation discussion in 841 00:35:28,720 --> 00:35:34,560 the chat so i'm going to say both gnome 842 00:35:30,720 --> 00:35:36,000 and gnome um myself a fair bit but i've 843 00:35:34,560 --> 00:35:37,680 never really thought too much about how 844 00:35:36,000 --> 00:35:39,760 it works sorry the cat is just having a 845 00:35:37,680 --> 00:35:41,920 bit of a scratch behind me there 846 00:35:39,760 --> 00:35:43,680 um 847 00:35:41,920 --> 00:35:45,920 so yeah that was that was really 848 00:35:43,680 --> 00:35:48,320 eye-opening for me thank you 849 00:35:45,920 --> 00:35:50,320 so we've got a few questions 850 00:35:48,320 --> 00:35:52,240 um 851 00:35:50,320 --> 00:35:54,160 let's start with 852 00:35:52,240 --> 00:35:56,079 what are your top bits of advice for 853 00:35:54,160 --> 00:35:58,000 people building and maintaining other 854 00:35:56,079 --> 00:36:00,720 libraries and apis based on what you've 855 00:35:58,000 --> 00:36:04,240 learned with gtk 856 00:36:00,720 --> 00:36:04,240 this is a very complex question 857 00:36:04,560 --> 00:36:09,040 the 858 00:36:05,520 --> 00:36:12,560 the main thing i'd say is 859 00:36:09,040 --> 00:36:14,079 not trying to please everyone 860 00:36:12,560 --> 00:36:16,000 try to 861 00:36:14,079 --> 00:36:18,079 use 862 00:36:16,000 --> 00:36:20,960 try to limit yourself 863 00:36:18,079 --> 00:36:22,480 give you constraint writing api is 864 00:36:20,960 --> 00:36:25,200 almost like 865 00:36:22,480 --> 00:36:28,720 painting or doing any other form of art 866 00:36:25,200 --> 00:36:28,720 more than technology 867 00:36:29,119 --> 00:36:34,000 the trick is in the either in the 868 00:36:31,680 --> 00:36:36,480 negative space or in the limits that you 869 00:36:34,000 --> 00:36:39,599 set your to yourself 870 00:36:36,480 --> 00:36:40,960 the important thing i think is to allow 871 00:36:39,599 --> 00:36:43,680 people to do 872 00:36:40,960 --> 00:36:46,480 complicated things 873 00:36:43,680 --> 00:36:48,400 but not 874 00:36:46,480 --> 00:36:51,119 try to second guess 875 00:36:48,400 --> 00:36:53,040 where they will go 876 00:36:51,119 --> 00:36:54,400 um 877 00:36:53,040 --> 00:36:56,079 and 878 00:36:54,400 --> 00:36:58,320 there's always time to add convenience 879 00:36:56,079 --> 00:37:00,240 api at some point 880 00:36:58,320 --> 00:37:02,640 the other thing that is incredibly 881 00:37:00,240 --> 00:37:05,040 important and i think is fundamental to 882 00:37:02,640 --> 00:37:06,720 everything else is 883 00:37:05,040 --> 00:37:09,040 documentation documentation 884 00:37:06,720 --> 00:37:10,880 documentation always write more 885 00:37:09,040 --> 00:37:13,119 documentation than you will actually 886 00:37:10,880 --> 00:37:13,119 need 887 00:37:13,200 --> 00:37:17,520 i think those are the two main main 888 00:37:15,680 --> 00:37:21,119 lessons that i learned 889 00:37:17,520 --> 00:37:22,640 yeah um i mean i my own experience i 890 00:37:21,119 --> 00:37:25,040 agree and i really like the way you 891 00:37:22,640 --> 00:37:27,599 phrased that um 892 00:37:25,040 --> 00:37:29,680 yeah and definitely i could definitely 893 00:37:27,599 --> 00:37:32,800 hear the years of experience and 894 00:37:29,680 --> 00:37:35,119 thinking about those issues behind there 895 00:37:32,800 --> 00:37:37,280 okay next question 896 00:37:35,119 --> 00:37:39,359 so you're trying to move away from xlib 897 00:37:37,280 --> 00:37:40,640 does that make it easier for the windows 898 00:37:39,359 --> 00:37:45,280 port 899 00:37:40,640 --> 00:37:49,040 yes the windows back end in gtk4 is 900 00:37:45,280 --> 00:37:51,359 incredibly simpler than it used to be 901 00:37:49,040 --> 00:37:53,440 we have more people contributing to it 902 00:37:51,359 --> 00:37:56,400 for that reason 903 00:37:53,440 --> 00:37:58,640 we have more people 904 00:37:56,400 --> 00:38:00,480 filing issues and 905 00:37:58,640 --> 00:38:03,839 helping out 906 00:38:00,480 --> 00:38:05,839 because we reduce the internal surface 907 00:38:03,839 --> 00:38:07,359 and the concepts are a lot easier to 908 00:38:05,839 --> 00:38:09,040 deal with 909 00:38:07,359 --> 00:38:10,720 the whale on backhand is also a lot 910 00:38:09,040 --> 00:38:14,160 easier to deal with because you know i 911 00:38:10,720 --> 00:38:16,240 have to implement weird x11 isms here 912 00:38:14,160 --> 00:38:18,240 and there 913 00:38:16,240 --> 00:38:20,800 the main thing that changed for instance 914 00:38:18,240 --> 00:38:23,200 is the clipboard uh and the 915 00:38:20,800 --> 00:38:25,200 copy and paste api 916 00:38:23,200 --> 00:38:28,640 and that 917 00:38:25,200 --> 00:38:30,160 went from being a weird protocol based 918 00:38:28,640 --> 00:38:32,880 on top of xlib 919 00:38:30,160 --> 00:38:33,839 the xdnd and the selection stuff 920 00:38:32,880 --> 00:38:35,920 to 921 00:38:33,839 --> 00:38:38,720 being uh 922 00:38:35,920 --> 00:38:40,400 passing file descriptors around 923 00:38:38,720 --> 00:38:43,119 that was 924 00:38:40,400 --> 00:38:45,520 incredibly that allows us to make the 925 00:38:43,119 --> 00:38:47,200 api a lot simpler as well for 926 00:38:45,520 --> 00:38:50,320 application developers 927 00:38:47,200 --> 00:38:53,040 people routinely now come to the 928 00:38:50,320 --> 00:38:55,760 matrix channel saying 929 00:38:53,040 --> 00:38:57,359 i replace the entire clipboard handling 930 00:38:55,760 --> 00:38:59,599 that i had in my application with like 931 00:38:57,359 --> 00:39:02,079 three lines of code it cannot possibly 932 00:38:59,599 --> 00:39:04,480 be this simple and we're like no no it 933 00:39:02,079 --> 00:39:06,960 is it is the simple it works oh that's 934 00:39:04,480 --> 00:39:09,200 wonderful 935 00:39:06,960 --> 00:39:11,680 that that that's 936 00:39:09,200 --> 00:39:14,400 a joy to imagine it must make you really 937 00:39:11,680 --> 00:39:16,480 happy to see people say that yeah it 938 00:39:14,400 --> 00:39:18,880 does 939 00:39:16,480 --> 00:39:21,280 okay next question is 940 00:39:18,880 --> 00:39:22,640 css support was a bold move do you think 941 00:39:21,280 --> 00:39:25,040 it'll keep up 942 00:39:22,640 --> 00:39:26,000 or meet the browsers ever 943 00:39:25,040 --> 00:39:28,400 um 944 00:39:26,000 --> 00:39:31,760 we kind of followed the 945 00:39:28,400 --> 00:39:35,280 css specifications as much as we as much 946 00:39:31,760 --> 00:39:38,000 it makes sense for a desktop toolkit 947 00:39:35,280 --> 00:39:42,720 so whenever in doubt on how to implement 948 00:39:38,000 --> 00:39:44,160 the css feature we follow the w3c specs 949 00:39:42,720 --> 00:39:47,520 but 950 00:39:44,160 --> 00:39:50,000 the gtk css is not a web css 951 00:39:47,520 --> 00:39:52,160 you cannot influence layout for instance 952 00:39:50,000 --> 00:39:54,160 using gtk css 953 00:39:52,160 --> 00:39:56,400 because we cannot 954 00:39:54,160 --> 00:40:00,400 allow people to turn every single 955 00:39:56,400 --> 00:40:01,920 application into the css zen garden demo 956 00:40:00,400 --> 00:40:04,160 uh it would be 957 00:40:01,920 --> 00:40:07,359 terrible for documentation purposes or 958 00:40:04,160 --> 00:40:10,640 for accessibility or for 959 00:40:07,359 --> 00:40:12,960 general like reliability 960 00:40:10,640 --> 00:40:13,920 it would be pretty pretty bad 961 00:40:12,960 --> 00:40:16,960 um 962 00:40:13,920 --> 00:40:19,599 but to be fair the css 963 00:40:16,960 --> 00:40:20,800 implementation gave us enough freedom to 964 00:40:19,599 --> 00:40:22,560 do 965 00:40:20,800 --> 00:40:26,400 a lot more 966 00:40:22,560 --> 00:40:28,400 uh interesting user interfaces than 967 00:40:26,400 --> 00:40:31,520 the plain blocky 968 00:40:28,400 --> 00:40:32,880 style of um 969 00:40:31,520 --> 00:40:35,359 uis 970 00:40:32,880 --> 00:40:37,839 i don't know we will probably never 971 00:40:35,359 --> 00:40:41,839 catch up to the web in the sense that it 972 00:40:37,839 --> 00:40:41,839 doesn't always make sense to follow that 973 00:40:45,599 --> 00:40:50,240 the next question is 974 00:40:48,240 --> 00:40:53,200 really interesting to see your revamped 975 00:40:50,240 --> 00:40:55,040 documentation workflow any specific tips 976 00:40:53,200 --> 00:40:56,880 or lessons learned for other projects to 977 00:40:55,040 --> 00:40:59,280 ensure docs are both easy to use and to 978 00:40:56,880 --> 00:41:00,960 contribute to 979 00:40:59,280 --> 00:41:02,240 treat documentation as you treat your 980 00:41:00,960 --> 00:41:03,599 code 981 00:41:02,240 --> 00:41:06,160 if you 982 00:41:03,599 --> 00:41:08,240 make it super easy to contribute code to 983 00:41:06,160 --> 00:41:11,440 your project you should make it equally 984 00:41:08,240 --> 00:41:12,560 easy to contribute documentation 985 00:41:11,440 --> 00:41:16,000 so 986 00:41:12,560 --> 00:41:17,760 if you're generating code from 987 00:41:16,000 --> 00:41:19,599 your source code if you're generating 988 00:41:17,760 --> 00:41:20,960 documentation for your source code 989 00:41:19,599 --> 00:41:22,480 link the 990 00:41:20,960 --> 00:41:24,720 document the 991 00:41:22,480 --> 00:41:27,040 place where that happens from the 992 00:41:24,720 --> 00:41:29,760 documentation itself 993 00:41:27,040 --> 00:41:32,079 you can look at how rust does their 994 00:41:29,760 --> 00:41:35,040 documentation and 995 00:41:32,079 --> 00:41:38,400 i mean it i took liberal inspiration 996 00:41:35,040 --> 00:41:40,640 from ra stock and from cargo uh for the 997 00:41:38,400 --> 00:41:41,920 gtk documentation website 998 00:41:40,640 --> 00:41:44,720 um 999 00:41:41,920 --> 00:41:46,480 definitely definitely follow that again 1000 00:41:44,720 --> 00:41:48,880 if you make it easy to contribute to 1001 00:41:46,480 --> 00:41:50,319 your code there is no reason whatsoever 1002 00:41:48,880 --> 00:41:52,640 you should make it easier to convert 1003 00:41:50,319 --> 00:41:54,960 documentation that way 1004 00:41:52,640 --> 00:41:55,839 so follow the same 1005 00:41:54,960 --> 00:41:58,160 um 1006 00:41:55,839 --> 00:42:00,319 the same practices there 1007 00:41:58,160 --> 00:42:03,520 allow people to easily open a merge 1008 00:42:00,319 --> 00:42:05,440 request with the documentation fixes 1009 00:42:03,520 --> 00:42:09,760 especially if you can do that without 1010 00:42:05,440 --> 00:42:09,760 leaving the web browser for instance 1011 00:42:10,319 --> 00:42:14,400 thanks for that okay we have time for 1012 00:42:12,560 --> 00:42:18,319 one more question 1013 00:42:14,400 --> 00:42:22,960 how well does gnome slash gnome for work 1014 00:42:18,319 --> 00:42:24,640 over a network uh for example ssh-x 1015 00:42:22,960 --> 00:42:26,560 um 1016 00:42:24,640 --> 00:42:29,359 well if you're using x11 it works 1017 00:42:26,560 --> 00:42:30,720 exactly the same if you're using weyland 1018 00:42:29,359 --> 00:42:32,160 then 1019 00:42:30,720 --> 00:42:34,960 we actually 1020 00:42:32,160 --> 00:42:37,680 do remoting using 1021 00:42:34,960 --> 00:42:39,440 rdp slash vnc 1022 00:42:37,680 --> 00:42:42,079 we have an entire 1023 00:42:39,440 --> 00:42:44,000 new um 1024 00:42:42,079 --> 00:42:46,160 new layer that does that inside the 1025 00:42:44,000 --> 00:42:47,520 inside tonum shell that lets you do 1026 00:42:46,160 --> 00:42:50,160 screen sharing 1027 00:42:47,520 --> 00:42:52,160 uh so basically you send 1028 00:42:50,160 --> 00:42:53,839 complete frames and then you have 1029 00:42:52,160 --> 00:42:55,119 protocols that do 1030 00:42:53,839 --> 00:42:57,280 you can either 1031 00:42:55,119 --> 00:42:58,960 you can either have dumb protocols that 1032 00:42:57,280 --> 00:43:00,720 literally take the 1033 00:42:58,960 --> 00:43:01,920 the output and just send it over the 1034 00:43:00,720 --> 00:43:04,240 wire 1035 00:43:01,920 --> 00:43:06,319 with or without compression otherwise 1036 00:43:04,240 --> 00:43:07,760 you have smarter protocols that can do 1037 00:43:06,319 --> 00:43:10,800 diffing so 1038 00:43:07,760 --> 00:43:12,400 what you send is smaller than that 1039 00:43:10,800 --> 00:43:14,400 but in general 1040 00:43:12,400 --> 00:43:17,119 um 1041 00:43:14,400 --> 00:43:19,680 the x11 approach is actually the least 1042 00:43:17,119 --> 00:43:22,079 efficient possible way to do things 1043 00:43:19,680 --> 00:43:24,720 because it the 1044 00:43:22,079 --> 00:43:27,680 nobody uses x11 1045 00:43:24,720 --> 00:43:30,160 draw commands anymore um unless you're 1046 00:43:27,680 --> 00:43:31,440 using application from the 80s or early 1047 00:43:30,160 --> 00:43:32,240 90s 1048 00:43:31,440 --> 00:43:35,119 um 1049 00:43:32,240 --> 00:43:37,119 and the other thing is that it's very 1050 00:43:35,119 --> 00:43:40,319 bandwidth and efficient 1051 00:43:37,119 --> 00:43:42,720 it sends a lot of data anyway 1052 00:43:40,319 --> 00:43:46,160 interleaved with commands 1053 00:43:42,720 --> 00:43:48,400 so if you're using protocols like vnc or 1054 00:43:46,160 --> 00:43:51,599 rdp it's usually much more efficient 1055 00:43:48,400 --> 00:43:51,599 because they can do compression 1056 00:43:51,760 --> 00:43:54,960 or even you don't even need to do that 1057 00:43:53,440 --> 00:43:57,680 gtk has a 1058 00:43:54,960 --> 00:43:59,359 html backend that literally runs your 1059 00:43:57,680 --> 00:44:01,520 application 1060 00:43:59,359 --> 00:44:04,160 on the server and then 1061 00:44:01,520 --> 00:44:06,800 sends the 1062 00:44:04,160 --> 00:44:10,960 the structure of the ui and various 1063 00:44:06,800 --> 00:44:13,599 assets to using websocket from a server 1064 00:44:10,960 --> 00:44:15,760 to the web browser pointed at a specific 1065 00:44:13,599 --> 00:44:19,280 url and port 1066 00:44:15,760 --> 00:44:21,520 it literally works as a remoting api and 1067 00:44:19,280 --> 00:44:25,040 i know of people using it in production 1068 00:44:21,520 --> 00:44:25,040 which scares the hell out of me 1069 00:44:25,359 --> 00:44:30,400 but it has that functionality as well 1070 00:44:28,240 --> 00:44:32,240 and people use it so 1071 00:44:30,400 --> 00:44:34,480 it's not just 1072 00:44:32,240 --> 00:44:38,079 that is definitely more efficient than 1073 00:44:34,480 --> 00:44:38,079 using x by ssh 1074 00:44:38,319 --> 00:44:41,599 all right well thank you we there was 1075 00:44:39,760 --> 00:44:44,880 one more question but um we're out of 1076 00:44:41,599 --> 00:44:48,560 time so we will transfer that question 1077 00:44:44,880 --> 00:44:53,520 over to the post talk chat kaya theater 1078 00:44:48,560 --> 00:44:55,200 channel in venulis um for you to have a 1079 00:44:53,520 --> 00:44:57,280 bit of a chat with emmanuella after the 1080 00:44:55,200 --> 00:44:58,560 talk if that's all right with you 1081 00:44:57,280 --> 00:45:00,800 absolutely 1082 00:44:58,560 --> 00:45:03,359 great um so 1083 00:45:00,800 --> 00:45:05,839 thank you very much emanuela for that 1084 00:45:03,359 --> 00:45:06,560 really interesting talk um 1085 00:45:05,839 --> 00:45:08,319 and 1086 00:45:06,560 --> 00:45:10,800 yeah um 1087 00:45:08,319 --> 00:45:12,880 your approach to all of this redesign 1088 00:45:10,800 --> 00:45:14,960 work and so on is is 1089 00:45:12,880 --> 00:45:16,960 um quite nice to hear about 1090 00:45:14,960 --> 00:45:19,599 um before we 1091 00:45:16,960 --> 00:45:22,240 um close off the stream for the day 1092 00:45:19,599 --> 00:45:26,400 um so this is the end of our normal 1093 00:45:22,240 --> 00:45:27,839 talks for today for linuxconfeio 1094 00:45:26,400 --> 00:45:32,000 um but 1095 00:45:27,839 --> 00:45:32,800 there is there is one more so if you are 1096 00:45:32,000 --> 00:45:34,800 a 1097 00:45:32,800 --> 00:45:38,160 professional or contributor ticket 1098 00:45:34,800 --> 00:45:40,000 holder remember to join us from 6 30 1099 00:45:38,160 --> 00:45:42,160 conference time 1100 00:45:40,000 --> 00:45:44,319 in venulis it'll be in a different stage 1101 00:45:42,160 --> 00:45:46,960 to what we're looking at right now for 1102 00:45:44,319 --> 00:45:48,560 the professional delegates networking 1103 00:45:46,960 --> 00:45:50,640 session and a really interesting 1104 00:45:48,560 --> 00:45:53,760 presentation from anthony green on 1105 00:45:50,640 --> 00:45:56,640 election analysis um so if 1106 00:45:53,760 --> 00:45:59,119 you are such a ticket holder um or a 1107 00:45:56,640 --> 00:46:02,240 speaker and you are going to that don't 1108 00:45:59,119 --> 00:46:04,160 miss it it's tonight um and 1109 00:46:02,240 --> 00:46:05,440 for those who are going to that and 1110 00:46:04,160 --> 00:46:07,599 those who aren't 1111 00:46:05,440 --> 00:46:10,319 have a lovely evening and we'll see you 1112 00:46:07,599 --> 00:46:11,530 back here tomorrow 1113 00:46:10,319 --> 00:46:14,689 bye 1114 00:46:11,530 --> 00:46:14,689 [Music]