summaryrefslogtreecommitdiffstats
path: root/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt
diff options
context:
space:
mode:
Diffstat (limited to '2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt')
-rw-r--r--2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt471
1 files changed, 471 insertions, 0 deletions
diff --git a/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt b/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt
new file mode 100644
index 00000000..34eeb842
--- /dev/null
+++ b/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt
@@ -0,0 +1,471 @@
+WEBVTT captioned by bhavin192
+
+NOTE Introduction
+
+00:00.000 --> 00:08.000
+Hello EmacsConf and hello fellow Emacs fans.
+
+00:08.000 --> 00:10.920
+My name is Michael Bauer, and I'm from Germany.
+
+00:10.920 --> 00:00:13.440
+I'm gonna talk to you about "Why and how Emacs
+
+00:00:13.440 --> 00:00:17.200
+should become a Wayland compositor."
+
+00:17.200 --> 00:21.740
+And it already kinda is a Wayland compositor.
+
+00:21.740 --> 00:25.000
+This talk is composed by Wayland and Emacs.
+
+00:25.000 --> 00:00:26.840
+If I'm talking about a Wayland compositor
+
+00:00:26.840 --> 00:00:29.360
+or Emacs as Wayland compositor,
+
+00:00:29.360 --> 00:00:30.440
+I mean it in the sense that
+
+00:00:30.440 --> 00:00:36.000
+EXWM is an X window manager. I hope you know EXWM.
+
+NOTE Why
+
+00:36.000 --> 00:41.000
+So, why?
+
+00:41.000 --> 00:00:44.120
+Emacs can do Wayland now, that was a stopper
+
+00:00:44.120 --> 00:00:49.000
+before, and now it's solved with `pgtk` branch.
+
+00:49.000 --> 00:00:53.240
+It makes the Emacs toolbox bigger,
+
+00:00:53.240 --> 00:00:55.000
+which is always a good thing.
+
+00:55.000 --> 00:00:58.440
+And the cool thing about Wayland, which is not
+
+00:00:58.440 --> 00:01:02.280
+possible under X is, it can run standalone
+
+00:01:02.280 --> 00:01:06.840
+on the Linux kernel interface, or nested under X,
+
+00:01:06.840 --> 00:01:07.120
+or even nested under Wayland.
+
+01:09.000 --> 00:01:13.840
+The compositor features of Emacs doesn't mean
+
+00:01:13.840 --> 00:01:16.960
+it has to take over the whole output.
+
+00:01:16.960 --> 00:01:20.560
+It can use them, even if it's just like
+
+00:01:20.560 --> 00:01:23.080
+a normal window or normal program.
+
+01:23.000 --> 00:01:25.120
+And last reason is,
+
+00:01:25.120 --> 00:01:27.240
+I want to keep living inside Emacs
+
+00:01:27.240 --> 00:01:31.000
+and Wayland is the future, apparently.
+
+NOTE EXWM use case
+
+01:31.000 --> 01:35.000
+EXWM use case is the first use case.
+
+01:35.000 --> 00:01:38.400
+You take a Wayland surface and put it inside
+
+00:01:38.400 --> 00:01:41.520
+an Emacs window. You see it right below.
+
+00:01:41.520 --> 00:01:45.880
+The video of me is a Wayland surface,
+
+00:01:45.880 --> 00:01:50.000
+and it's inside an Emacs window managed by Emacs.
+
+01:50.000 --> 00:01:53.480
+Emacs does the input, and the clipboard handling,
+
+00:01:53.480 --> 00:01:59.000
+and can insert itself here, and do great things.
+
+01:59.000 --> 00:02:03.200
+And it's a possibility to Lispify the Linux desktop,
+
+00:02:03.200 --> 00:02:08.000
+as Emacs Lispifies the command line.
+
+NOTE XWidget use case
+
+02:08.000 --> 00:02:12.960
+The other use case is the XWidget use case.
+
+00:02:12.960 --> 00:02:17.000
+I don't know if you know XWidgets.
+
+02:17.000 --> 00:02:19.720
+It's embedded X windows inside Emacs.
+
+00:02:19.720 --> 00:02:24.000
+There's a web browser available in Emacs.
+
+02:24.000 --> 00:02:27.520
+With Wayland, you could embed anything that can
+
+00:02:27.520 --> 00:02:32.000
+create a Wayland surface like video, web, or 3D.
+
+02:32.000 --> 00:02:34.880
+Think OpenGL, something like
+
+00:02:34.880 --> 00:02:38.000
+EmacsGL would be possible.
+
+02:38.000 --> 02:46.000
+And we wouldn't have just images like we have so far.
+
+NOTE How
+
+02:46.000 --> 00:02:50.560
+So, how to implement this Wayland compositor?
+
+00:02:50.560 --> 00:02:52.560
+I'm going to tell you how I did it,
+
+00:02:52.560 --> 00:02:57.000
+or I did this demo I'm showing you right now.
+
+02:57.000 --> 00:03:00.680
+First of all, how does Wayland work?
+
+00:03:00.680 --> 00:03:04.000
+Wayland is a protocol in XML.
+
+03:04.000 --> 00:03:11.120
+It's a server and client, and they share a set of
+
+00:03:11.120 --> 00:03:13.960
+objects, and the objects have methods.
+
+00:03:13.960 --> 00:03:16.120
+They are specified in the protocol,
+
+00:03:16.120 --> 00:03:24.080
+and Wayland also says how the server
+
+00:03:24.080 --> 00:03:25.720
+and client talk to each other.
+
+00:03:25.720 --> 00:03:33.440
+First blocker for Emacs becoming a Wayland
+
+00:03:33.440 --> 00:03:37.000
+compositor is that Emacs and Wayland both have
+
+00:03:37.000 --> 00:03:41.880
+their own event loop, and you can't merge them too.
+
+00:03:41.880 --> 00:03:45.800
+But you don't have to merge them
+
+00:03:45.800 --> 00:03:48.000
+because you can just make Emacs speak Wayland.
+
+03:48.000 --> 00:03:50.040
+So, Emacs becomes a Wayland client,
+
+00:03:50.040 --> 00:03:53.000
+and there's an extra server Emacs is talking to.
+
+03:53.000 --> 00:03:59.160
+So, we need a minimal Wayland server that does all
+
+00:03:59.160 --> 00:04:03.000
+the stuff Emacs can't do and do the rest in Emacs.
+
+04:03.000 --> 00:04:07.800
+---The minimal Wayland server, I did it in wlroots.
+
+00:04:07.800 --> 00:04:13.040
+That's the library behind Sway. I think it's
+
+00:04:13.040 --> 00:04:20.000
+the Wayland library to do stuff like this.
+
+04:20.000 --> 04:26.000
+I implemented four different things to make it work.
+
+04:26.000 --> 00:04:30.680
+It's these three letter acronyms on the left.
+
+00:04:30.680 --> 00:04:34.520
+It's Emacs, Wayland, and then it's a server,
+
+00:04:34.520 --> 00:04:38.000
+a client, a protocol, and buffers.
+
+04:38.000 --> 04:44.000
+The server is written in C and it's mostly tinywl.
+
+04:44.000 --> 00:04:46.280
+It's the example of wlroots,
+
+00:04:46.280 --> 00:04:52.000
+and it's around 1000 lines of code.
+
+04:52.000 --> 00:04:54.960
+ewc, the Wayland client in Emacs,
+
+00:04:54.960 --> 00:04:58.560
+is the thing I'm most proud of.
+
+00:04:58.560 --> 00:05:02.120
+It's 300 lines of code, and it is a
+
+00:05:02.120 --> 00:05:08.000
+fully featured Wayland client in Emacs.
+
+05:08.000 --> 00:05:11.640
+With this, Emacs can speak Wayland,
+
+00:05:11.640 --> 00:05:18.000
+and then I implemented Emacs Wayland protocol.
+
+05:18.000 --> 00:05:21.280
+It more or less allows Emacs to become a Wayland
+
+00:05:21.280 --> 00:05:24.640
+window manager, so it's not actually the compositor.
+
+00:05:24.640 --> 00:05:27.680
+The compositor stays in C, but Emacs is
+
+00:05:27.680 --> 00:05:31.000
+now a Wayland window manager!
+
+05:31.000 --> 00:05:34.520
+And the last thing is Emacs Wayland buffers.
+
+00:05:34.520 --> 00:05:35.880
+It's the window manager part.
+
+00:05:35.880 --> 00:05:38.440
+It's around 500 lines of code,
+
+00:05:38.440 --> 00:05:41.680
+and it does the buffer management inside
+
+00:05:41.680 --> 00:05:45.680
+Emacs windows, or floating right like you see me
+
+00:05:45.680 --> 00:05:48.000
+now floating on the right.
+
+05:48.000 --> 00:05:51.000
+It works, but it is still buggy,
+
+00:05:51.000 --> 00:05:54.320
+and it is also missing input handling,
+
+00:05:54.320 --> 00:06:01.000
+so there's more code to come for this to work.
+
+NOTE Caveats
+
+06:01.000 --> 06:05.000
+Some caveats about this approach.
+
+06:05.000 --> 00:06:09.640
+wlroots is around 60 kilo LoCs (Line of Code)
+
+00:06:09.640 --> 00:06:12.000
+and in active development.
+
+06:12.000 --> 00:06:16.640
+They have like a slogan 60 kilo locs of code
+
+00:06:16.640 --> 00:06:19.760
+you had to write anyway to make a Wayland
+
+00:06:19.760 --> 00:06:22.520
+compositor. And no, you don't have to write it.
+
+00:06:22.520 --> 00:06:25.840
+But I still remember when it was like 50 kilo locs,
+
+00:06:25.840 --> 00:06:29.680
+and now it's 60. And it's like a moving target.
+
+00:06:29.680 --> 00:06:32.480
+I think it could be quite a lot of work
+
+00:06:32.480 --> 00:06:34.000
+to keep up with it.
+
+06:34.000 --> 06:41.000
+Yeah, it could be quite a bit of work.
+
+06:41.000 --> 06:46.000
+Some windows don't like to keep the aspect ratios.
+
+06:46.000 --> 00:06:49.560
+You tell them and you have to crop them.
+
+00:06:49.560 --> 00:06:53.000
+And the interface I use in wlroots for doing this,
+
+06:53.000 --> 00:06:57.280
+`wlr_scene`, can't do cropping yet,
+
+00:06:57.280 --> 00:07:01.000
+so this doesn't work.
+
+07:01.000 --> 00:07:03.240
+Another problem is with GTK.
+
+00:07:03.240 --> 00:07:03.280
+Once Wayland is enabled and it stays on.
+
+07:11.000 --> 00:07:12.560
+This doesn't make sense.
+
+00:07:12.560 --> 00:07:15.000
+Okay, if you kill the Wayland server,
+
+00:07:15.000 --> 00:07:18.000
+GTK kills Emacs, that's not a good thing.
+
+07:18.000 --> 00:07:21.000
+And it's still a bit of work and fussing needed
+
+00:07:21.000 --> 00:07:23.640
+to get this to work reliably.
+
+00:07:23.640 --> 00:07:26.000
+It's quite buggy right now.
+
+NOTE Call to action
+
+07:26.000 --> 07:30.000
+And that brings me to my call to action.
+
+07:30.000 --> 00:07:34.440
+I think making Emacs Wayland capable is
+
+00:07:34.440 --> 00:07:39.000
+a further step to make an Emacs OS.
+
+07:39.000 --> 00:07:41.360
+It gains output and input handling.
+
+00:07:41.360 --> 00:07:44.120
+Output handling is already there,
+
+00:07:44.120 --> 00:07:45.760
+input handling is still missing,
+
+00:07:45.760 --> 00:07:49.720
+but Emacs can manage monitors, outputs,
+
+00:07:49.720 --> 00:07:53.040
+different frames if it's like nested,
+
+00:07:53.040 --> 00:07:57.080
+And inputs, keyboards, simulation keys,
+
+00:07:57.080 --> 00:07:58.000
+stuff like that.
+
+07:58.000 --> 08:02.000
+We could use it in more ways for Emacs display, maybe.
+
+08:02.000 --> 00:08:05.720
+Wayland just manages simple pixel buffers,
+
+00:08:05.720 --> 00:08:09.000
+so it's a protocol for managing pixel buffers.
+
+08:09.000 --> 00:08:12.560
+And in a sense, we could go back to
+
+00:08:12.560 --> 00:08:15.560
+the old X ways and maybe even ditch GTK.
+
+00:08:15.560 --> 00:08:18.000
+I don't know, but why need it?
+
+08:18.000 --> 00:08:20.600
+We can composite without it.
+
+00:08:20.600 --> 00:08:27.000
+Let's make buffer menus, buffer world, buffer.
+
+08:27.000 --> 00:08:29.040
+Emacs Wayland protocol, like I did it,
+
+00:08:29.040 --> 00:08:34.040
+allows a very concise design, and it allows
+
+00:08:34.040 --> 00:08:38.000
+to improve on the EXWM code base.
+
+08:38.000 --> 00:08:41.840
+And I wrote KISS style because EXWM has
+
+00:08:41.840 --> 00:08:45.000
+workspace management integrated.
+
+08:45.000 --> 00:08:50.600
+I don't think that's needed, like Emacs does it.
+
+00:08:50.600 --> 00:08:53.640
+Why do you have to do something extra?
+
+00:08:53.640 --> 00:08:56.000
+So why do it?
+
+08:56.000 --> 00:09:00.040
+To finish the call to action,
+
+00:09:00.040 --> 00:09:03.280
+if this is the thing you want to see in Emacs,
+
+00:09:03.280 --> 00:09:06.600
+maybe you want to get involved, have some ideas,
+
+00:09:06.600 --> 00:09:10.000
+so we could discuss it.
+
+09:10.000 --> 00:09:14.960
+I'm looking forward to discuss with you
+
+00:09:14.960 --> 00:09:21.000
+and hear your questions and ideas.
+
+09:21.000 --> 00:09:24.200
+I want to say a big thank you to the
+
+00:09:24.200 --> 00:09:26.600
+organizers of EmacsConf and the other speakers
+
+00:09:26.600 --> 00:09:29.000
+for making this event possible.
+
+09:29.000 --> 09:39.000
+Thank you, and see you.