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.