WEBVTT captioned by anush NOTE GNU Emacs and its purpose 00:00:00.000 --> 00:00:08.960 Hello! I'm going to talk about what I would like to see 00:00:08.960 --> 00:00:11.240 in GNU Emacs in the future, 00:00:11.240 --> 00:00:17.600 and what I would prefer not to find there. 00:00:17.600 --> 00:00:22.080 This is all within the context 00:00:22.080 --> 00:00:25.360 of GNU Emacs and its purpose. 00:00:25.360 --> 00:00:30.600 GNU Emacs is a part of the GNU operating system, 00:00:30.600 --> 00:00:33.300 and the purpose of the GNU operating system 00:00:33.400 --> 00:00:38.840 is not simply to do a good job technically, 00:00:38.840 --> 00:00:42.640 not simply to be good to use. 00:00:42.640 --> 00:00:45.760 Its main purpose, its overall purpose, 00:00:45.760 --> 00:00:48.560 is to give people freedom, 00:00:48.560 --> 00:00:54.760 and to help them value and defend that freedom. 00:00:54.760 --> 00:01:00.160 A GNU package, by being a convenient, well-written program, 00:01:00.160 --> 00:01:06.000 should contribute to that overall ethical and social goal, 00:01:06.000 --> 00:01:10.440 and not only to the usefulness of our software. 00:01:10.440 --> 00:01:14.080 This is true for GNU Emacs 00:01:14.080 --> 00:01:18.720 as much as it is for any other free program we’ve developed. 00:01:18.720 --> 00:01:25.320 In fact, GNU Emacs is the first GNU program that I released. 00:01:25.320 --> 00:01:28.800 I had written some other things before that, 00:01:28.800 --> 00:01:30.600 but didn't release them at that time. 00:01:30.600 --> 00:01:34.200 There was no particular use in doing so. 00:01:34.200 --> 00:01:36.007 So it was through GNU Emacs 00:01:36.107 --> 00:01:38.307 that I learned about various things 00:01:38.407 --> 00:01:44.240 such as software licenses and how to defend freedom. 00:01:44.240 --> 00:01:50.407 You're of course familiar with what GNU Emacs is today, 00:01:50.507 --> 00:01:54.240 thanks to the contributions of thousands of other people 00:01:54.340 --> 00:01:56.967 who came after me. 00:01:57.067 --> 00:01:58.880 What would I like? 00:01:58.880 --> 00:02:01.433 What would other people like? 00:02:01.533 --> 00:02:06.480 Lots of people come to Emacs familiar with VS Code, 00:02:06.480 --> 00:02:10.520 and they say, "Please make Emacs more like VS Code. 00:02:10.520 --> 00:02:15.840 Change everything that you did in the 1980s and 90s 00:02:15.840 --> 00:02:18.320 to be like that other thing." 00:02:18.320 --> 00:02:24.200 That wouldn't be feasible even if we wanted to. 00:02:24.200 --> 00:02:30.440 Our goal is not to be... not resembling VS Code. 00:02:30.440 --> 00:02:33.540 Any resemblance is coincidental. NOTE Lisp as the extension language 00:02:33.640 --> 00:02:37.940 But in particular, 00:02:38.040 --> 00:02:43.774 we do not want to have extension languages other than Lisp. 00:02:43.874 --> 00:02:47.474 Emacs Lisp is the variant of Lisp 00:02:47.574 --> 00:02:49.474 that we've always supported, 00:02:49.574 --> 00:02:52.960 which has evolved along with Emacs. 00:02:52.960 --> 00:02:57.400 We can conceivably have Scheme as well, 00:02:57.400 --> 00:03:01.040 if we can sufficiently solve the problems, 00:03:01.140 --> 00:03:03.760 the technical problems of making Scheme 00:03:03.760 --> 00:03:06.480 and Emacs Lisp interoperate. 00:03:06.480 --> 00:03:11.600 We did some design work, I think that was with Tom Lord, 00:03:11.600 --> 00:03:15.880 whom the community will greatly miss. 00:03:15.880 --> 00:03:19.240 In the 1990s, there are challenges that remain; 00:03:19.340 --> 00:03:21.360 maybe it can be done. 00:03:21.360 --> 00:03:27.960 But a non-Lispy language would be a mistake. 00:03:27.960 --> 00:03:33.000 It would divert our development focus into areas 00:03:33.000 --> 00:03:37.480 that we don't need, languages that are less powerful, 00:03:37.480 --> 00:03:46.280 less beautiful, and less desirable for the purpose. NOTE JavaScript versus freedom 00:03:46.280 --> 00:03:52.120 However, the language that we above all shouldn't support 00:03:52.120 --> 00:03:57.233 is JavaScript. That's not because of the language itself. 00:03:57.333 --> 00:04:00.480 I don't know the JavaScript language, 00:04:00.480 --> 00:04:04.200 I've heard people say it's rather clumsy 00:04:04.200 --> 00:04:07.520 and not well designed, but I don't know this. 00:04:07.520 --> 00:04:12.400 In any case, it's not what my views are based on. 00:04:12.400 --> 00:04:14.740 There's something much worse about JavaScript, 00:04:14.840 --> 00:04:18.800 which is not the language itself, but how people use it. 00:04:18.800 --> 00:04:23.640 Namely, it's been adopted as a way for a network server 00:04:23.640 --> 00:04:26.120 to send a program to your machine 00:04:26.120 --> 00:04:30.120 without your even noticing, so that this program, 00:04:30.120 --> 00:04:35.007 written by you don't know who, will run on your computer 00:04:35.107 --> 00:04:37.200 and do you don't know what. 00:04:37.200 --> 00:04:39.674 And you're supposed to just trust 00:04:39.774 --> 00:04:43.640 all and sundry developers of software 00:04:43.640 --> 00:04:45.840 for the sites you visit, 00:04:45.840 --> 00:04:51.320 which very commonly do malicious things, often unknown 00:04:51.320 --> 00:04:55.680 to the people who are running the server itself. 00:04:55.680 --> 00:04:59.320 They paid someone else to design a website 00:04:59.320 --> 00:05:01.307 and they probably said, oh, 00:05:01.407 --> 00:05:04.440 make it fashionable and attractive. 00:05:04.440 --> 00:05:09.760 And they didn't insist, don't snoop on the visitors, 00:05:09.760 --> 00:05:12.840 even if they understood what the issue was. 00:05:12.840 --> 00:05:20.480 So these sites snoop. It's a serious problem. 00:05:20.480 --> 00:05:24.080 The problem comes not from the language JavaScript, 00:05:24.080 --> 00:05:28.680 but from the fact that browsers, by default, 00:05:28.680 --> 00:05:32.440 will pull in JavaScript code that gets sent to them 00:05:32.440 --> 00:05:35.833 and run it to do anything at all. 00:05:35.933 --> 00:05:39.320 Emacs is supposed to defend your freedom. 00:05:39.320 --> 00:05:42.520 It's supposed to help you to defend your freedom, 00:05:42.520 --> 00:05:45.640 and lead you to defend your freedom, 00:05:45.640 --> 00:05:47.200 which means it shouldn't lead you 00:05:47.200 --> 00:05:50.960 to throw your freedom away as soon as you visit a site 00:05:50.960 --> 00:05:53.920 that tries to send you a non-free program 00:05:53.920 --> 00:05:58.280 to run straight off of that other machine. 00:05:58.280 --> 00:06:04.080 So it's important not to lead users 00:06:04.080 --> 00:06:06.520 to do computing this way. 00:06:06.520 --> 00:06:10.800 So what are some good things 00:06:10.800 --> 00:06:14.640 that we would want instead of this? NOTE Updating "An Introduction to Emacs Lisp Programming" 00:06:14.640 --> 00:06:19.774 One thing we want 00:06:19.874 --> 00:06:26.474 is to update the "Introduction to Emacs Lisp Programming" 00:06:26.574 --> 00:06:29.480 by the late Bob Chassell. 00:06:29.480 --> 00:06:34.720 It's a book that makes it easy for even non-programmers 00:06:34.720 --> 00:06:38.000 to learn to write simple programs in Emacs Lisp. 00:06:38.000 --> 00:06:41.200 And from there, they can go on to do better. 00:06:41.200 --> 00:06:44.800 We made a pretty big change in Emacs Lisp 00:06:44.800 --> 00:06:49.480 a few years ago, implementing lexical scoping by default. 00:06:49.480 --> 00:06:57.360 Originally, Emacs Lisp used to be entirely dynamic scoping, 00:06:57.360 --> 00:07:01.960 like some of the earliest Lisp interpreters. 00:07:01.960 --> 00:07:06.520 This is a change that should have a careful job 00:07:06.520 --> 00:07:10.560 of updating for the introduction. 00:07:10.560 --> 00:07:14.600 I'm sure we've made it clear in the reference manual, 00:07:14.600 --> 00:07:18.400 but that's not what beginners read first. 00:07:18.400 --> 00:07:23.307 We need something to teach them in lexical scoping. NOTE More memorable package names 00:07:23.407 --> 00:07:30.440 Another thing we could use is to make it easier 00:07:30.440 --> 00:07:33.880 to understand the facilities that we have. 00:07:33.880 --> 00:07:38.560 For instance, I think every package 00:07:38.560 --> 00:07:42.200 that you might load into your Emacs and run 00:07:42.200 --> 00:07:47.680 should have a name that helps you remember what job it does. 00:07:47.680 --> 00:07:51.274 It doesn't have to be super long to tell you 00:07:51.374 --> 00:07:53.507 what job that package does. 00:07:53.607 --> 00:07:56.774 You can read the description to learn that. 00:07:56.874 --> 00:07:59.600 But once you've read the description, 00:07:59.600 --> 00:08:02.974 it should be memorable. When you see that name again, 00:08:03.074 --> 00:08:06.507 you should realize, oh, that's the package I could use 00:08:06.607 --> 00:08:11.880 to do "less" and so. We've had a tendency 00:08:11.880 --> 00:08:17.840 to give packages names for the sake of pure wordplay 00:08:17.940 --> 00:08:23.474 or lack of obvious meaning, 00:08:23.574 --> 00:08:28.188 and I think we should add on, to those packages, 00:08:28.189 --> 00:08:31.707 names that people will remember. NOTE Simplifying the command interface 00:08:31.807 --> 00:08:39.200 Also, there are ways we can simplify the command interface 00:08:39.200 --> 00:08:43.760 of Emacs. For instance, there are many different parameters 00:08:43.760 --> 00:08:48.000 users can specify that can have several values, 00:08:48.000 --> 00:08:51.707 and sometimes you do various kinds of editing 00:08:51.807 --> 00:08:54.440 in one session. That's normal in Emacs, 00:08:54.440 --> 00:08:57.740 and you might want different parameter settings 00:08:57.840 --> 00:09:00.307 for different kinds of editing. 00:09:00.407 --> 00:09:06.200 So you specify parameter value A, do some editing, 00:09:06.200 --> 00:09:10.240 you specify parameter value B, and do some editing, 00:09:10.240 --> 00:09:13.720 and you'd switch back and forth, so you want 00:09:13.720 --> 00:09:17.440 to switch back and forth between these parameters. 00:09:17.440 --> 00:09:22.607 I think we should aim ... 00:09:22.707 --> 00:09:26.640 People have added various commands to switch 00:09:26.740 --> 00:09:30.400 between the last two or n values of this parameter, 00:09:30.500 --> 00:09:32.674 and another command to switch 00:09:32.774 --> 00:09:36.740 between the last two or n values of this [other] parameter, 00:09:36.840 --> 00:09:41.360 and then that parameter, you know, and that parameter. 00:09:41.360 --> 00:09:44.667 I think we should be able to have 00:09:44.767 --> 00:09:49.120 a switch between the last n values command 00:09:49.120 --> 00:09:54.320 that works on various different parameters, 00:09:54.320 --> 00:09:57.040 and thus makes it easy to remember 00:09:57.040 --> 00:09:59.240 that there is this facility. 00:09:59.340 --> 00:10:03.774 Because right now the commands to do that are all ad-hoc, 00:10:03.874 --> 00:10:08.540 and if you don't use a toggling among the last n values 00:10:08.640 --> 00:10:11.740 of a given parameter, you won't know how to do it. 00:10:11.840 --> 00:10:15.267 It won't be obvious that there is a way, 00:10:15.367 --> 00:10:17.667 so you'd have to go to a suitable manual 00:10:17.767 --> 00:10:20.100 and study for a while to think of that. 00:10:20.100 --> 00:10:23.620 We could make this easily discoverable. NOTE Modularity 00:10:23.620 --> 00:10:30.140 There is another kind of modularity that's important, 00:10:30.140 --> 00:10:34.100 and that is modularity at the level of maintenance. 00:10:34.100 --> 00:10:38.207 This is something all programmers know about, of course, 00:10:38.307 --> 00:10:43.300 but in Emacs, various parts interact with other parts, 00:10:43.300 --> 00:10:47.980 and we've tried to make them modular in design 00:10:47.980 --> 00:10:50.380 by using lots of hooks, 00:10:50.380 --> 00:10:54.380 but we haven't gone as far as we could. 00:10:54.380 --> 00:10:58.060 With some effort, we could find calls 00:10:58.060 --> 00:11:00.220 from over here to over there 00:11:00.220 --> 00:11:03.140 that could be replaced by use of hooks, 00:11:03.140 --> 00:11:05.940 so that we could reduce the extent 00:11:05.940 --> 00:11:09.874 to which you need to know about one part of Emacs 00:11:09.974 --> 00:11:12.607 to maintain another part of Emacs, 00:11:12.707 --> 00:11:17.580 and I think that as we keep adding more facilities to Emacs, 00:11:17.580 --> 00:11:22.220 this kind of modularity will be an investment that pays off. NOTE Editing formatted text 00:11:22.220 --> 00:11:27.140 There’s one big area of features 00:11:27.240 --> 00:11:30.700 that I would like to see in Emacs, 00:11:30.800 --> 00:11:33.180 and that's the ability to edit 00:11:33.180 --> 00:11:40.340 formatted documents in WYSIWYG, to be able to edit 00:11:40.340 --> 00:11:47.940 a letter or a scientific mathematical paper with formulas 00:11:47.940 --> 00:11:52.900 or a nicely laid out manual, 00:11:52.900 --> 00:11:56.660 looking at what it's really going to look like. 00:11:56.660 --> 00:12:00.460 Now we have free software to do this. 00:12:00.460 --> 00:12:04.660 For instance, I use LibreOffice some of the time. 00:12:04.660 --> 00:12:08.100 Sometimes it's faster than writing something 00:12:08.100 --> 00:12:11.860 to be formatted with a text formatter 00:12:11.860 --> 00:12:16.180 and then formatting it. But when I use LibreOffice, 00:12:16.180 --> 00:12:19.220 I always miss the commands and facilities, 00:12:19.220 --> 00:12:22.574 the editing facilities of Emacs. 00:12:22.674 --> 00:12:26.500 I'd like to have them both together, something with 00:12:26.500 --> 00:12:30.340 the text formatting capabilities of LibreOffice 00:12:30.340 --> 00:12:36.060 or even better of TeX, but the editing commands 00:12:36.060 --> 00:12:40.300 and facilities of Emacs. This would be a big job, 00:12:40.300 --> 00:12:45.980 but it can be made up of a lot of medium-sized jobs. 00:12:45.980 --> 00:12:50.020 If people start working on those medium-sized jobs, 00:12:50.020 --> 00:12:52.060 then in a number of years 00:12:52.060 --> 00:12:55.460 we'll have something absolutely amazing. NOTE Not the equivalent of a modern web browser 00:12:55.460 --> 00:13:01.140 But one thing I think we really shouldn't have 00:13:01.140 --> 00:13:06.500 is the equivalent of a modern web browser. 00:13:06.500 --> 00:13:10.940 The World Wide Web started out in the 1990s 00:13:10.940 --> 00:13:13.774 in a much simpler form, 00:13:13.874 --> 00:13:17.820 where a web page described its contents, 00:13:17.820 --> 00:13:21.180 and the web browser laid them out, 00:13:21.180 --> 00:13:23.707 and the user could parameterize 00:13:23.807 --> 00:13:27.140 how to lay out various kinds of situations. 00:13:27.140 --> 00:13:31.707 This was not only convenient for users 00:13:31.807 --> 00:13:35.874 who wanted to control things and understand things, 00:13:35.974 --> 00:13:39.640 it was also freedom-respecting 00:13:39.740 --> 00:13:43.020 because the layout was done by your browser. 00:13:43.020 --> 00:13:48.100 If you had a free browser, you were in control, 00:13:48.100 --> 00:13:51.620 even though the browser was complicated already. 00:13:51.620 --> 00:13:54.707 But starting around two decades ago, 00:13:54.807 --> 00:13:58.820 there was an explosion in the complexity of browsers 00:13:58.820 --> 00:14:02.780 as companies wanted to have more and more control 00:14:02.780 --> 00:14:07.700 over exactly what would appear on a user's screen. 00:14:07.700 --> 00:14:12.374 So they invented lots of features to control that, 00:14:12.474 --> 00:14:15.907 features where the user couldn't really customize 00:14:16.007 --> 00:14:18.307 how something would actually appear 00:14:18.407 --> 00:14:21.207 because the whole point was that 00:14:21.307 --> 00:14:23.707 the company could control that. 00:14:23.807 --> 00:14:27.020 And JavaScript was sort of the ultimate level 00:14:27.020 --> 00:14:32.007 of "the company controls everything." 00:14:32.107 --> 00:14:38.500 Because of this, going beyond the simple level 00:14:38.500 --> 00:14:43.540 of web page formatting features in Emacs 00:14:43.540 --> 00:14:50.940 is basically heading down a path that leads to subjugation. 00:14:50.940 --> 00:14:54.740 It's a path that we need to stay away from. 00:14:54.740 --> 00:15:00.307 It's a path to an unjust world of computing 00:15:00.407 --> 00:15:03.420 that you can easily see around you. 00:15:03.420 --> 00:15:08.600 Web browsers nowadays are designed to display ads 00:15:08.700 --> 00:15:11.567 that you may not want to see. 00:15:11.667 --> 00:15:17.900 They're designed for DRM. 00:15:17.900 --> 00:15:22.420 They're designed for companies to snoop on you 00:15:22.420 --> 00:15:26.300 in unobvious ways. And all of that 00:15:26.300 --> 00:15:28.980 we should protect ourselves from, 00:15:28.980 --> 00:15:31.300 protect our users from. NOTE Getting involved 00:15:31.300 --> 00:15:39.980 So I hope that some of you will be enthusiastic 00:15:39.980 --> 00:15:42.060 about some of these changes, 00:15:42.060 --> 00:15:46.940 especially towards editing formatted text. 00:15:46.940 --> 00:15:51.980 If you want to get involved, we have 00:15:51.980 --> 00:15:57.820 a development discussion list called emacs-devel@gnu.org. 00:15:57.820 --> 00:16:02.380 You can join that. You can also, 00:16:02.380 --> 00:16:05.740 if you get interested in working on a package 00:16:05.740 --> 00:16:09.500 and you're not an experienced Emacs Lisp developer, 00:16:09.500 --> 00:16:13.640 it's a very good idea to look for an experienced developer 00:16:13.740 --> 00:16:14.980 to talk with. 00:16:14.980 --> 00:16:19.220 Make sure you can write programs in Emacs Lisp first. 00:16:19.220 --> 00:16:24.260 It's not useful to take up the expert’s time learning that. 00:16:24.260 --> 00:16:27.307 You can still learn it from the introduction. 00:16:27.407 --> 00:16:31.660 But after that, when it's a matter of how to design 00:16:31.660 --> 00:16:36.180 your favorite package, do have a discussion with developers. 00:16:36.180 --> 00:16:39.060 They'll give you design ideas 00:16:39.060 --> 00:16:43.180 that will help you make a package that we put into Emacs. 00:16:43.180 --> 00:17:01.500 Now it's time for questions.