summaryrefslogtreecommitdiffstats
path: root/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.vtt
blob: 75b624a9fc2f37cedb796f4a12046d5868fa961c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
WEBVTT

00:00.000 --> 00:02.600
the recording button here.

00:02.600 --> 00:03.600
OK.

00:03.600 --> 00:05.180
Thank you again for the great talk,

00:05.180 --> 00:06.680
even though I haven't been able to catch most of it

00:06.680 --> 00:08.560
because I've been running around behind the scenes.

00:08.560 --> 00:11.360
But very much interested in DBUS and Emacs.

00:11.360 --> 00:13.240
I'm very much looking forward to watching it

00:13.240 --> 00:14.080
after the conference.

00:14.080 --> 00:18.360
But for folks who were able to and did catch the talk,

00:18.360 --> 00:21.680
please, now it's time to send in your questions.

00:21.680 --> 00:24.820
You can either ask away on IRC or put them on the pad.

00:24.820 --> 00:28.300
And we'll also open up this PBB room in a little bit

00:28.300 --> 00:31.960
if you'd like to join here directly on asking questions.

00:31.960 --> 00:34.520
So, Ian, please take it away.

00:34.520 --> 00:35.280
Hey, thanks.

00:35.280 --> 00:38.580
Yeah, going to wait for some questions to come in.

00:38.580 --> 00:41.320
But there's a couple of points I wanted to make.

00:41.320 --> 00:46.840
So I'm going to share my screen here for a minute.

00:46.840 --> 00:50.880
If you're interested in exploring more about DBUS,

00:50.880 --> 00:54.080
there is a graphical client called dfeat.

00:54.080 --> 00:56.200
That's d-feat.

00:56.200 --> 00:59.960
I guess puns are strong when it comes to DBUS software.

00:59.960 --> 01:03.400
And this just gives you a graphical overview

01:03.400 --> 01:06.160
of what's going on with your bus.

01:06.160 --> 01:09.920
So in the case that I was looking at in Emacs,

01:09.920 --> 01:11.600
you can look.

01:11.600 --> 01:13.280
Here's the hostname1 service.

01:13.280 --> 01:18.360
And here's you can change the chassis of it or read.

01:18.360 --> 01:20.240
I'm on a desktop here.

01:20.240 --> 01:23.940
So I think this is a really great tool

01:23.940 --> 01:30.720
for just understanding what is available and what DBUS can do.

01:30.720 --> 01:33.720
I think I didn't do a great job of setting out a vision.

01:33.720 --> 01:37.000
So I want to try to reiterate that here.

01:37.000 --> 01:41.320
Ever since I started using X1 several years ago,

01:41.320 --> 01:46.480
and before that even, once I was learning about LISP machines,

01:46.480 --> 01:48.920
one of the things that I really want out of my computing

01:48.920 --> 01:52.720
experience is a full LISP environment,

01:52.720 --> 01:54.400
like a modern LISP machine.

01:54.400 --> 01:59.440
And I think Emacs and X1 are the closest thing to that

01:59.440 --> 02:01.800
that you can get on a modern machine.

02:01.800 --> 02:03.760
But if you're thinking about what

02:03.760 --> 02:07.680
are the gaps between that and a full blown desktop environment,

02:07.680 --> 02:10.800
there is many of them that make it inconvenient

02:10.800 --> 02:12.760
in a variety of different ways.

02:12.760 --> 02:17.600
And my vision is really to have an Emacs desktop environment.

02:17.600 --> 02:21.080
And I think DBUS is really key to making that work.

02:21.080 --> 02:24.760
And I would love, on the one to two year horizon,

02:24.760 --> 02:29.080
I would really like to see common system tasks be

02:29.080 --> 02:32.680
able to get done seamlessly from inside of Emacs.

02:32.680 --> 02:34.640
And what I mean by that is things

02:34.640 --> 02:37.440
like pairing with a Bluetooth device,

02:37.440 --> 02:41.440
connecting to a Wi-Fi network, rebooting your computer

02:41.440 --> 02:44.440
or putting it into suspend, or any of those things

02:44.440 --> 02:47.800
that you might think of doing in a full blown desktop

02:47.800 --> 02:51.320
environment, whether it's Mac OS, or Windows, or GNOME, or KDE,

02:51.320 --> 02:53.920
or whatever, you should be able to do all that from Emacs.

02:53.920 --> 02:56.840
You should be able to manage everything

02:56.840 --> 02:59.200
without having to leave that environment.

02:59.200 --> 03:02.160
Because I really prefer the Emacs environment.

03:02.160 --> 03:05.520
I would like to do all of that from inside Emacs.

03:05.520 --> 03:07.380
And when it comes to integrating with all

03:07.380 --> 03:11.960
those different things, DBUS is really key to making it work.

03:11.960 --> 03:20.560
But I do think that offering the ability of integrating Emacs

03:20.560 --> 03:23.160
into the desktop for people who don't

03:23.160 --> 03:26.720
want to go that route of having a full blown Emacs desktop

03:26.720 --> 03:30.880
environment, I think that's also a path to some really

03:30.880 --> 03:35.200
interesting feature opportunity that

03:35.200 --> 03:39.760
has been difficult to explore in Emacs in years past.

03:39.760 --> 03:44.160
So I really think it's just a great space to be exploring.

03:44.160 --> 03:46.280
And I'm really excited to see what kind of stuff

03:46.280 --> 03:48.520
I can build in there, and what things other people

03:48.520 --> 03:49.600
start building in there.

03:53.400 --> 03:54.160
Sounds great.

03:54.160 --> 03:57.640
Yeah, and I think DBUS is kind of, I guess,

03:57.640 --> 04:00.680
one of those essential key pieces of software

04:00.680 --> 04:03.120
on GNU Linux where, I mean, if it's working,

04:03.120 --> 04:05.240
and when it's working, it's pretty much,

04:05.240 --> 04:06.800
I mean, you don't even notice it.

04:06.800 --> 04:07.760
It's behind the scenes.

04:07.760 --> 04:09.600
Everything seems to be working hand in hand.

04:09.600 --> 04:11.880
So yeah, I remember, for example,

04:11.880 --> 04:14.600
when I first switched to using a custom window manager,

04:14.600 --> 04:16.760
you pretty much lose all of that sort

04:16.760 --> 04:20.200
of integration and togetherness right away

04:20.200 --> 04:22.440
if there is no DBUS.

04:22.440 --> 04:24.560
And yeah, a lot of beginners, like myself at the time

04:24.560 --> 04:27.480
at least, don't even know what they're missing out on.

04:27.480 --> 04:33.200
So kudos for taking this on and having this vision of essentially

04:33.200 --> 04:35.840
moving towards that direction of being able to use Emacs

04:35.840 --> 04:38.840
as a potentially fully featured desktop environment.

04:38.840 --> 04:40.680
I think that's awesome.

04:40.680 --> 04:42.560
Yeah, thank you.

04:42.560 --> 04:44.880
Looks like I have some questions in the pad,

04:44.880 --> 04:47.160
so I will cover some of those.

04:47.160 --> 04:48.720
No, it's not Web3.

04:48.720 --> 04:49.320
Not funny.

04:52.440 --> 04:54.840
I'm sorry, the question was, so is this a Web3 approach?

04:54.840 --> 04:56.840
No, it isn't.

04:56.840 --> 04:58.160
I have another question.

04:58.160 --> 04:59.960
This is such a great overview of DBUS.

04:59.960 --> 05:01.800
I haven't been paying attention to this space

05:01.800 --> 05:05.120
because it seems to be in flux 10 or 15 years ago.

05:05.120 --> 05:07.040
How long has DBUS been around, and what

05:07.040 --> 05:09.160
was in place before that?

05:09.160 --> 05:11.960
So I covered this real briefly in the beginning of the talk,

05:11.960 --> 05:15.400
but DBUS dates from 2002-ish.

05:15.400 --> 05:21.760
And I would say since 2010, 2012, that time frame,

05:21.760 --> 05:26.080
it has been pretty stable and has seen wide adoption

05:26.080 --> 05:28.600
in multiple desktop environments.

05:28.600 --> 05:30.800
Before DBUS, there wasn't anything like it.

05:30.800 --> 05:33.120
It didn't replace a similar feature.

05:33.120 --> 05:35.320
And if you wanted to do the sorts of things

05:35.320 --> 05:40.160
that DBUS does, you were pretty limited.

05:40.160 --> 05:42.600
Those of you who have been around for a while

05:42.600 --> 05:45.600
might remember that a lot of GUI software for Linux

05:45.600 --> 05:49.840
in the 90s was some variant of a shell,

05:49.840 --> 05:53.720
like a graphical shell program that just called out

05:53.720 --> 05:57.160
to an existing binary on the system.

05:57.160 --> 05:59.200
Like you might have a disk formatter,

05:59.200 --> 06:01.320
and it lets you has a dropdown for the file

06:01.320 --> 06:03.400
and lists your devices and whatever.

06:03.400 --> 06:04.960
But it was doing all the work.

06:04.960 --> 06:06.200
All it was was the interface.

06:06.200 --> 06:09.480
All the work was happening by delegating it to a program.

06:09.480 --> 06:12.000
And essentially, what that's doing

06:12.000 --> 06:16.480
is that's turning the text user interface, the command line

06:16.480 --> 06:19.880
user interface, into an API because you're using a program

06:19.880 --> 06:22.680
to talk to it, but it's not really meant for that.

06:22.680 --> 06:27.400
And there's a lot of details in that interface that

06:27.400 --> 06:29.240
are not stable.

06:29.240 --> 06:33.480
Like anyone who's used a Mac after using a Linux machine

06:33.480 --> 06:37.240
has probably been surprised that the find command didn't

06:37.240 --> 06:38.960
work how they expected.

06:38.960 --> 06:40.480
And there's a lot of that.

06:40.480 --> 06:43.000
In order to make that stuff really reliable,

06:43.000 --> 06:47.600
you end up having to build a lot of special cases into it,

06:47.600 --> 06:49.680
but you're doing it at the wrong layer.

06:49.680 --> 06:51.440
And what DBUS does is it really lets

06:51.440 --> 06:55.320
you have a separate architecture where the service is what

06:55.320 --> 06:59.200
encapsulates all of the differences between kernels,

06:59.200 --> 07:02.280
distributions, flavors of tooling,

07:02.280 --> 07:05.440
and just abstracts all of that and gives you a proper API

07:05.440 --> 07:06.400
that you can use.

07:06.400 --> 07:07.860
And I think that's great because that

07:07.860 --> 07:12.600
lets you build these high-level interactive components

07:12.600 --> 07:15.320
at an abstract level where you don't necessarily

07:15.320 --> 07:17.280
need to care about the implementation details.

07:17.280 --> 07:19.480
I think that's really great.

07:19.480 --> 07:21.400
So that's really what was happening there.

07:21.400 --> 07:23.680
And when it comes to two-way stuff,

07:23.680 --> 07:26.480
it was like a fancy version of Unix pipes.

07:26.480 --> 07:29.760
You would run your program, and maybe if you were lucky,

07:29.760 --> 07:32.360
it had some sort of machine-readable output

07:32.360 --> 07:33.960
switch you could turn on so that you

07:33.960 --> 07:37.480
could have a progress bar or something like that.

07:37.480 --> 07:38.600
That was the sort of thing.

07:38.600 --> 07:40.720
But there wasn't really anything exactly like DBUS.

07:45.240 --> 07:46.480
I have another question.

07:46.480 --> 07:48.360
Forgive me if this question is silly.

07:48.360 --> 07:53.320
Why is everything DBUS prefixed with org dot?

07:53.320 --> 07:57.800
Not everything is, but most things are.

07:57.800 --> 08:00.800
Those identifiers are reverse FQDN.

08:00.800 --> 08:03.560
So if you think about the Java namespaces,

08:03.560 --> 08:05.960
that's what they're ripping off there.

08:05.960 --> 08:09.680
And it's org because most of it is written by nonprofits.

08:09.680 --> 08:12.320
So in particular, Free Desktop is

08:12.320 --> 08:15.040
what it sponsors development of DBUS.

08:15.040 --> 08:17.320
And so there is an inordinate number

08:17.320 --> 08:22.480
of org dot Free Desktop dot whatever services on DBUS

08:22.480 --> 08:28.480
just because they build so many of them.

08:28.480 --> 08:32.680
In your investigations, do most OS desktop environment window

08:32.680 --> 08:35.360
manager interop well over DBUS?

08:35.360 --> 08:38.160
Which ones have proven more challenging, if any?

08:40.960 --> 08:45.280
I'm not sure I quite understand this question.

08:45.280 --> 08:49.720
DBUS is fairly abstract, and those graphical programs

08:49.720 --> 08:53.360
can choose to use it or not.

08:53.360 --> 08:58.440
But you're not interacting with the desktop environment

08:58.440 --> 08:59.040
too much.

08:59.040 --> 09:01.200
You're interacting with a service.

09:01.200 --> 09:03.720
So what you're doing is you're taking any program

09:03.720 --> 09:06.520
and you're breaking it into a client server model.

09:06.520 --> 09:09.680
The DBUS service does all of the work,

09:09.680 --> 09:12.360
and then there's a graphical environment on top of it.

09:12.360 --> 09:14.640
So they're communicating back and forth.

09:14.640 --> 09:16.320
And if you want to do those same things,

09:16.320 --> 09:18.080
you want to communicate with the service,

09:18.080 --> 09:22.400
you don't need to communicate with the actual GUI program

09:22.400 --> 09:25.000
unless you want to control the program.

09:25.000 --> 09:27.240
If you want to do the same thing the program is doing,

09:27.240 --> 09:28.680
you can use a DBUS service.

09:28.680 --> 09:30.960
I guess in the case of something like a word processor,

09:30.960 --> 09:32.720
you might want to have a DBUS API that

09:32.720 --> 09:35.720
lets you add a heading or something like that.

09:35.720 --> 09:39.160
That's not an area I've explored too much.

09:39.160 --> 09:40.760
So I'm not sure how that works.

09:40.760 --> 09:42.760
Work done.

09:46.120 --> 09:49.080
Regarding using XWIM as a desktop environment,

09:49.080 --> 09:55.040
does XWIM provide a session manager daemon?

09:55.040 --> 09:57.200
Whoever wrote that, if you could add some more context,

09:57.200 --> 09:58.080
I would appreciate it.

09:58.080 --> 10:01.000
I'm not sure I can answer that as it is written.

10:04.120 --> 10:07.560
No, I don't know.

10:07.560 --> 10:08.720
Next question.

10:08.720 --> 10:11.600
There is a lot of criticism against DBUS out there.

10:11.600 --> 10:13.280
Why do you think that might be?

10:13.280 --> 10:15.200
Well, it's because it's not very good.

10:18.600 --> 10:21.960
I mean, I love what it unlocks feature wise,

10:21.960 --> 10:25.240
but I do think it is not the best implementation

10:25.240 --> 10:28.240
for doing what it does.

10:28.240 --> 10:31.640
But when in Rome, you want to do those things,

10:31.640 --> 10:32.760
I want to do those things, I don't

10:32.760 --> 10:34.480
want to rewrite everything in the way

10:34.480 --> 10:36.960
I think it should have been to get it done because I'll never

10:36.960 --> 10:37.760
get it done.

10:37.760 --> 10:39.880
The whole point is you just shove it in a corner,

10:39.880 --> 10:41.600
you don't have to care about it, and you

10:41.600 --> 10:43.440
use high level bindings.

10:43.440 --> 10:46.040
I would say the specific criticisms I've seen

10:46.040 --> 10:54.720
are using XML is something that is not popular these days.

10:54.720 --> 10:58.260
And if I had to criticize a thing about it,

10:58.260 --> 11:02.240
I would say it doesn't have strong guidelines

11:02.240 --> 11:03.680
for how to make a good API.

11:03.680 --> 11:06.120
And so the quality of one service to another

11:06.120 --> 11:09.120
can be extremely variable.

11:09.120 --> 11:12.360
And different services have different ways

11:12.360 --> 11:14.440
of doing very similar tasks.

11:14.440 --> 11:16.960
So I would love to see, if anything, a little more

11:16.960 --> 11:19.960
uniformity in those APIs.

11:19.960 --> 11:22.840
I generally could care less that it's sending XML around

11:22.840 --> 11:23.760
or whatever.

11:23.760 --> 11:30.920
I think people who are offended that XML is being used

11:30.920 --> 11:37.560
don't have their hearts in the right place, basically.

11:37.560 --> 11:45.320
Which system services come to mind

11:45.320 --> 11:47.000
when thinking about applications,

11:47.000 --> 11:49.760
be it at the OS desktop environment, window manager

11:49.760 --> 11:50.440
level?

11:50.440 --> 11:53.520
So the stuff that I am interested in using this for

11:53.520 --> 11:56.600
is, like I was saying, connecting to wireless networks,

11:56.600 --> 11:59.360
pairing with Bluetooth devices, that kind of stuff.

11:59.360 --> 12:04.520
Things that don't have a streamlined way of accomplishing

12:04.520 --> 12:07.960
it without using D-Bus and some graphical client.

12:07.960 --> 12:09.360
And I would just like to not have

12:09.360 --> 12:11.360
to deal with the client end of it.

12:11.360 --> 12:14.160
I would like the UI to be in Emacs.

12:19.720 --> 12:21.160
When it comes to managing devices,

12:21.160 --> 12:23.760
how are D-Bus and U-Dev related?

12:23.760 --> 12:25.760
U-Dev is a D-Bus service.

12:25.760 --> 12:30.520
So it is a daemon that is running at some point

12:30.520 --> 12:31.760
in the background.

12:31.760 --> 12:33.520
If it's not running, D-Bus will start it

12:33.520 --> 12:35.040
when you send it a message.

12:35.040 --> 12:42.120
And I'm sorry, I'm mistaking U-Dev for U-Disks.

12:42.120 --> 12:46.640
U-Dev is unrelated to D-Bus.

12:46.640 --> 12:53.400
U-Dev is a way of dynamically populating your devices

12:53.400 --> 12:56.520
and having triggers that run when they are plugged in

12:56.520 --> 12:57.600
or unplugged.

12:57.600 --> 12:59.840
They're orthogonal.

12:59.840 --> 13:02.120
D-Bus and U-Dev don't interact.

13:02.120 --> 13:08.520
But D-Bus, I suspect some of the D-Bus services, like U-Disks,

13:08.520 --> 13:11.720
too, probably need to talk to U-Dev in order

13:11.720 --> 13:13.080
to do their job.

13:13.080 --> 13:16.200
But this is a service by service thing,

13:16.200 --> 13:27.400
rather than D-Bus is integrated with U-Dev sort of thing.

13:27.400 --> 13:29.320
Skip one of these.

13:29.320 --> 13:32.200
If you want to do the kinds of things that D-Bus does,

13:32.200 --> 13:33.280
you're limited.

13:33.280 --> 13:35.880
What is something D-Bus does that you couldn't do before?

13:35.880 --> 13:37.520
What is a really cool use of D-Bus

13:37.520 --> 13:39.880
in a modern desktop environment?

13:39.880 --> 13:43.680
So again, I think that the hardware and dynamic refresh

13:43.680 --> 13:47.520
is the use case that I keep coming back to.

13:47.520 --> 13:50.760
You walk somewhere where there's a new Wi-Fi network

13:50.760 --> 13:52.960
or there's an open Wi-Fi network to connect to,

13:52.960 --> 13:55.240
and maybe you get a notification somewhere.

13:55.240 --> 13:57.360
You plug in some hardware and it shows up

13:57.360 --> 13:59.880
in some list or some user interface

13:59.880 --> 14:01.880
to make it easy to use.

14:01.880 --> 14:03.600
You unplug it, it goes away.

14:03.600 --> 14:05.960
Those are the things that I think are really interesting

14:05.960 --> 14:10.600
because when you use a full blown desktop environment,

14:10.600 --> 14:14.240
you have come to expect that kind of interactivity

14:14.240 --> 14:17.760
and that kind of integration from the low level

14:17.760 --> 14:21.760
of the hardware up to whatever graphical layer you're using.

14:21.760 --> 14:26.440
And Emacs doesn't have that, and I want it to have that.

14:26.440 --> 14:32.000
So I think that's the thing that D-Bus really gives me.

14:32.000 --> 14:34.240
I would say in particular, you plug in hardware

14:34.240 --> 14:37.240
and it shows up in a list, that's pretty damn cool.

14:37.240 --> 14:40.640
That's a thing that I don't remember seeing done

14:40.640 --> 14:43.400
without D-Bus, or the way it was done

14:43.400 --> 14:47.240
was not portable and very complicated.

14:47.240 --> 14:50.320
D-Bus allows you to build those types of interfaces

14:50.320 --> 14:53.280
with a lot less work, and I think that's pretty great.

14:58.640 --> 14:59.680
Let's see.

14:59.680 --> 15:02.040
As an average GNU slash Linux user,

15:02.040 --> 15:05.320
I've used signals and methods before but not properties.

15:05.320 --> 15:07.600
You gave an example involving properties,

15:07.600 --> 15:08.880
but it kind of flew by.

15:08.880 --> 15:11.640
Can you explain briefly what clients and services

15:11.640 --> 15:13.960
can do with properties?

15:13.960 --> 15:20.880
Sure, so let me share this screen real quick.

15:20.880 --> 15:26.000
So just looking at hostname1 because this

15:26.000 --> 15:28.480
is a pretty simple and straightforward.

15:28.480 --> 15:32.920
Actually, let me look at U disks.

15:32.920 --> 15:36.720
So here's a whole mess of disks that are connected,

15:36.720 --> 15:39.360
and you can see here's a block device

15:39.360 --> 15:41.960
and it has all of these different properties to it.

15:41.960 --> 15:46.600
So hit system will say, is this a system device?

15:46.600 --> 15:48.680
Is this a fixed device, something

15:48.680 --> 15:50.400
that the system is in control of mounting,

15:50.400 --> 15:53.000
or is this something that a user might want to interact with?

15:53.000 --> 15:55.160
That property is how you're going to know

15:55.160 --> 15:56.600
which one of those things are, and I

15:56.600 --> 15:58.880
think that's really important when you're building a UI.

15:58.880 --> 16:00.480
Maybe you want to hide the system disks

16:00.480 --> 16:04.280
because you can see them, but there's not much you can do.

16:04.280 --> 16:07.440
I can't unmount my root device without turning the computer

16:07.440 --> 16:07.960
off.

16:07.960 --> 16:11.760
So the things you might want to do

16:11.760 --> 16:15.800
at a graphical interactive level are pretty limited,

16:15.800 --> 16:19.440
and that property lets you figure that out.

16:19.440 --> 16:22.400
Here's a crypto vacuum device that read only

16:22.400 --> 16:24.240
what drives it's associated with.

16:24.240 --> 16:28.280
They really bundle up just a lot of metadata about the thing,

16:28.280 --> 16:31.400
and they have a lot of links in between the different objects.

16:31.400 --> 16:36.480
So looking at one thing, you can connect it up

16:36.480 --> 16:39.560
to other parts of it at different levels.

16:39.560 --> 16:43.440
There's the notion of a drive, which contains a block device,

16:43.440 --> 16:45.560
which can have some partition tables, which

16:45.560 --> 16:49.200
can have file systems, or maybe an encryption container that

16:49.200 --> 16:50.800
has more of those things.

16:50.800 --> 16:57.160
So it's really a tree, but it's a strangely modeled tree

16:57.160 --> 17:00.880
where you have to walk the different leaves.

17:00.880 --> 17:03.200
It's not a single tree that encapsulates everything.

17:03.200 --> 17:07.360
It is a tree of links into other bits of the tree,

17:07.360 --> 17:07.960
essentially.

17:07.960 --> 17:11.920
So they're important to use for that sort of thing.

17:16.320 --> 17:17.680
The other thing that properties do

17:17.680 --> 17:24.440
is the signals let you know when a property has been updated.

17:24.440 --> 17:28.640
So if your hostname changes, you can

17:28.640 --> 17:30.600
get a signal that says, hey, my hostname changed,

17:30.600 --> 17:32.840
and maybe give a notice.

17:32.840 --> 17:35.440
Or if your active network connection changes

17:35.440 --> 17:39.320
or disconnects, a signal is going to be what tells you that,

17:39.320 --> 17:43.200
and the change in property is what will drive the signal.

17:43.200 --> 17:44.840
So it's kind of related to that.

17:49.920 --> 17:53.120
Naive question, me not knowing much about D-Bus.

17:53.120 --> 17:56.400
Is there such a thing as a D-Bus reflection browser,

17:56.400 --> 17:58.280
maybe Emacs-based, that lets you discover

17:58.280 --> 18:02.160
all the behavior different D-Bus app participants provide?

18:02.160 --> 18:04.160
And actually, wait, I think you're showing it.

18:04.160 --> 18:06.320
Defeat is that.

18:06.320 --> 18:11.440
Definitely a to-do item is to build an Emacs Lisp interface

18:11.440 --> 18:16.520
that is akin to Defeat, but I have not done that.

18:16.520 --> 18:17.760
So pull requests, welcome.

18:17.760 --> 18:25.920
Next question, D-Bus seems great for extensibility,

18:25.920 --> 18:28.240
but then Emacs has no such mechanism

18:28.240 --> 18:30.680
and is fantastically more extensible.

18:30.680 --> 18:31.960
Why do you think this is so?

18:34.680 --> 18:37.840
I don't think I agree with the premise.

18:37.840 --> 18:42.400
D-Bus is not really that extensible in the way

18:42.400 --> 18:46.560
that you might think in the same context as Emacs.

18:46.560 --> 18:49.360
You can add new functionality by adding a new service,

18:49.360 --> 18:51.080
but you can't add new functionality

18:51.080 --> 18:54.000
to an existing service without changing it.

18:54.000 --> 18:57.120
So I'm not sure I would say that's

18:57.120 --> 19:01.080
extensible in the same way, whereas Emacs is very malleable

19:01.080 --> 19:06.120
and you can change how it works even while it's running.

19:06.120 --> 19:12.120
So I think it's a different kind of extensibility, really.

19:12.120 --> 19:15.840
And Emacs can participate on D-Bus,

19:15.840 --> 19:21.080
so Emacs has a superset of what D-Bus can do, really.

19:25.200 --> 19:27.120
Do you have any other cool D-Bus ideas?

19:27.120 --> 19:29.480
I think I have dropped them all.

19:29.480 --> 19:32.600
Definitely remote org capture is a thing

19:32.600 --> 19:34.840
that I have wanted a couple of times

19:34.840 --> 19:38.160
because if I'm browsing around somewhere,

19:38.160 --> 19:40.520
I'd really love to have a simple flow that

19:40.520 --> 19:44.720
allows me to turn a web page into an org capture.

19:44.720 --> 19:47.640
And I think D-Bus could be a good way of accomplishing that,

19:47.640 --> 19:49.920
although I haven't messed with the browser integration

19:49.920 --> 19:50.400
end of it.

19:54.640 --> 19:57.920
Are there buses besides system and session?

19:57.920 --> 19:59.920
Is there anything more to a bus besides a way

19:59.920 --> 20:03.920
to group objects?

20:03.920 --> 20:09.920
There are always at least a system bus and a session bus.

20:09.920 --> 20:12.760
And actually, that's maybe not completely true.

20:12.760 --> 20:15.640
There's always at least a system bus, session bus

20:15.640 --> 20:19.800
as long as there is at least one logged in session.

20:19.800 --> 20:22.720
And there's really more than one session bus.

20:22.720 --> 20:26.800
There's one bus per session so that you're not leaking stuff

20:26.800 --> 20:28.880
across sessions on the same computer

20:28.880 --> 20:32.960
because despite this being 2022, Unix

20:32.960 --> 20:34.840
is still a multi-user operating system

20:34.840 --> 20:38.280
and you have to think about that stuff.

20:38.280 --> 20:43.640
There are an unlimited number of D-Bus buses.

20:43.640 --> 20:47.040
You can create ones that have limited sets of services.

20:47.040 --> 20:51.760
You can connect to ones over a TCP socket.

20:51.760 --> 20:55.320
There are always generally at least system and session.

20:55.320 --> 20:58.360
There can additionally be other ones.

20:58.360 --> 21:02.800
But it is uncommon to have any other bus.

21:02.800 --> 21:06.080
Generally, well-behaved D-Bus services

21:06.080 --> 21:10.000
will attach to one or the other of those two buses.

21:10.000 --> 21:13.760
And in fact, PulseAudio is, it has D-Bus support

21:13.760 --> 21:16.440
but it is not a good D-Bus citizen

21:16.440 --> 21:18.960
because it does not use the session bus.

21:18.960 --> 21:22.000
It has, it's very weird actually.

21:22.000 --> 21:25.240
It has a D-Bus plug-in that hooks into the session bus

21:25.240 --> 21:28.640
but all it has is a method that returns the path to the Unix

21:28.640 --> 21:31.560
socket of the real D-Bus which you then

21:31.560 --> 21:34.640
have to connect to separately which strikes me

21:34.640 --> 21:37.840
as not the best way of doing that.

21:41.800 --> 21:43.680
Cool.

21:43.680 --> 21:46.840
All right, I think that is all of the questions.

21:50.000 --> 21:52.520
Cool, I think we still have about like six and a half

21:52.520 --> 21:55.160
or seven more minutes of Q&A on the stream.

21:55.160 --> 21:57.920
So if there are any more questions, folks,

21:57.920 --> 21:59.480
please feel free to post them on the pad

21:59.480 --> 22:03.120
or come up here, join us on BBB.

22:03.120 --> 22:06.240
Yeah, we can hang out here for a little bit longer.

22:06.240 --> 22:07.960
The stream will move on at some point

22:07.960 --> 22:10.960
but Ian, of course, and anyone else who is interested

22:10.960 --> 22:14.280
is welcome to hang out if Ian is around.

22:14.280 --> 22:15.560
Yeah.

22:15.560 --> 22:16.960
I will be around for a bit.

22:16.960 --> 22:20.280
I am on IRC all the time but I'm not always

22:20.280 --> 22:21.280
paying attention to it.

22:21.280 --> 22:23.080
You're welcome to reach out to me there.

22:26.680 --> 22:32.160
This is with almost all of my Emacs packages and stuff.

22:32.160 --> 22:36.400
This is in my Emacs Weirdware project on Codeburg.

22:36.400 --> 22:40.360
So codeburg.org slash Emacs dash weirdware

22:40.360 --> 22:45.200
has everything that I demoed and some other wonderful goodies

22:45.200 --> 22:49.040
that maybe you already know about and maybe you don't.

22:49.040 --> 22:52.280
I saw one other question from the chat, which

22:52.280 --> 22:56.720
is what do you use this for?

22:56.720 --> 23:01.760
Well, I mean, the main thing I use it for

23:01.760 --> 23:07.600
is discomfort for managing external devices.

23:07.600 --> 23:13.040
But this has been a really great research project

23:13.040 --> 23:20.000
just to understand D-Bus better, see what it can offer,

23:20.000 --> 23:26.240
and write some interesting code because what I really like

23:26.240 --> 23:31.480
is writing code that unlocks new possibilities

23:31.480 --> 23:33.680
to where people can look at it and say,

23:33.680 --> 23:35.200
oh, that gives me a great idea.

23:35.200 --> 23:36.680
I want to do this with it.

23:36.680 --> 23:41.560
And I see D-Base and this talk as really just pushing

23:41.560 --> 23:43.360
mindshare on this stuff.

23:43.360 --> 23:47.160
And really, the best result of this talk

23:47.160 --> 23:50.960
is for people to come out of it and say, wow, that was awesome.

23:50.960 --> 23:55.120
I can't wait to build something with it and go build new stuff.

23:55.120 --> 23:57.120
And just kind of building those platforms

23:57.120 --> 24:00.600
that other people can use and find helpful

24:00.600 --> 24:03.120
in whatever their programming journey is.

24:03.120 --> 24:05.040
That's the thing that I really like.

24:05.040 --> 24:06.040
That means a lot to me.

24:06.040 --> 24:09.000
So I hope that someone watches this

24:09.000 --> 24:32.360
and comes away with a good idea and goes and hacks on it.

24:32.360 --> 24:34.360
Looks like there's one more question.

24:34.360 --> 24:38.520
I'm not sure if we have time.

24:38.520 --> 24:44.160
I'll follow up in the pad if we end up over time on that.

24:44.160 --> 24:45.840
Yeah, we still have a couple more minutes,

24:45.840 --> 25:12.480
so it should be good.

25:12.480 --> 25:15.040
OK, so the last question is, it looks

25:15.040 --> 25:19.400
like D-Bus is mostly useful for Emacs to do IPC.

25:19.400 --> 25:20.880
If I understand correctly, this is

25:20.880 --> 25:24.440
how SIGTEX works when working with LaTeX docs.

25:24.440 --> 25:26.960
How does it compare with other ways of doing IPC,

25:26.960 --> 25:29.360
for example, communicating over a socket with MPD?

25:32.960 --> 25:36.000
So the main way that it's different

25:36.000 --> 25:40.320
is that MPD has its own protocol that you

25:40.320 --> 25:46.280
have to build support for in whatever your client is.

25:46.280 --> 25:49.800
D-Bus gives you a single, uniform way

25:49.800 --> 25:52.520
of talking to any service.

25:52.520 --> 25:55.720
So instead of having to reinvent that socket code

25:55.720 --> 25:59.080
and write the protocol support for MPD or whatever else,

25:59.080 --> 26:02.280
where you're taking the concrete, what

26:02.280 --> 26:04.280
are the bytes over the wire, and building

26:04.280 --> 26:07.840
an abstract programming interface that wraps that

26:07.840 --> 26:12.360
and drives those things, D-Bus already provides all of that.

26:12.360 --> 26:15.240
So you can say, here's a description of everything

26:15.240 --> 26:18.760
that I already do, and you can code gen stuff

26:18.760 --> 26:20.800
to do all of it.

26:20.800 --> 26:24.840
So I think that's the main difference between them.

26:24.840 --> 26:26.840
But it is over a socket.

26:26.840 --> 26:31.040
It's over a Unix socket for local stuff, TCP for remote.

26:31.040 --> 26:33.000
It is very similar.

26:33.000 --> 26:34.480
The main difference is that it is

26:34.480 --> 26:37.080
a framework for multiple applications

26:37.080 --> 26:39.960
rather than an application-specific mechanism,

26:39.960 --> 26:42.200
which makes it very easy to reuse

26:42.200 --> 26:43.880
in a variety of different contexts.

26:43.880 --> 26:46.520
And I think that's been key to its popularity

26:46.520 --> 26:49.240
over the last 10 years or so is the fact

26:49.240 --> 26:52.880
that it provides just enough opinion about how stuff should

26:52.880 --> 26:56.400
work that you don't have to think too hard about what

26:56.400 --> 26:57.600
should the protocol be.

26:57.600 --> 26:58.640
Should it be binary?

26:58.640 --> 26:59.560
Should it be text?

26:59.560 --> 27:01.520
Should it be S expressions?

27:01.520 --> 27:02.640
Should it be JSON?

27:02.640 --> 27:05.080
It's already done for you, and you can just think about,

27:05.080 --> 27:06.880
how do I connect it up?

27:06.880 --> 27:08.840
And I think that provides a lot of value.

27:12.280 --> 27:14.440
Yeah, and I can second that.

27:14.440 --> 27:16.520
It's been adopted by all sorts of different software

27:16.520 --> 27:19.040
projects, one of which I worked on.

27:19.040 --> 27:21.560
Jammy, people might know, GNU package

27:21.560 --> 27:23.760
for basically universal communication.

27:23.760 --> 27:27.280
It's basically a text messaging and also audio video calling

27:27.280 --> 27:28.680
and conferencing application.

27:28.680 --> 27:31.400
And it's Daemon, which runs in the background.

27:31.400 --> 27:34.800
It also supports D-Bus, so you can do all sorts of things,

27:34.800 --> 27:38.280
write little Python scripts or whatever,

27:38.280 --> 27:40.480
talk with it through D-Bus, give it commands

27:40.480 --> 27:43.560
to take calls from a particular point

27:43.560 --> 27:46.920
or just hang up calls or just do all sorts of things

27:46.920 --> 27:48.080
over D-Bus.

27:48.080 --> 27:51.640
And it is all, like you said, sort of application agnostic.

27:51.640 --> 27:53.920
It's not specific to, oh, how would I

27:53.920 --> 27:58.520
do this in a different way for each individual application?

27:58.520 --> 27:59.200
Yeah, exactly.

27:59.200 --> 28:02.080
It's the de facto way of doing that sort of stuff

28:02.080 --> 28:04.680
on Linux machines these days.

28:04.680 --> 28:09.920
And you can look back to some of the other message passing

28:09.920 --> 28:13.920
stuff in Windows and see it's drawn some inspiration

28:13.920 --> 28:18.480
from a variety of different places and different ways

28:18.480 --> 28:21.560
of doing that kind of interactivity.

28:21.560 --> 28:24.080
But it is, I mean, I don't think there was ever

28:24.080 --> 28:26.240
really a serious competitor to it,

28:26.240 --> 28:28.080
but it is the de facto standard if you

28:28.080 --> 28:31.960
want to do any kind of graphical program that

28:31.960 --> 28:36.960
manipulates your system or a batch program that

28:36.960 --> 28:41.120
drives an otherwise purely interactive graphical program.

28:41.120 --> 28:42.720
That's the tool.

28:42.720 --> 28:47.880
And there is not really any competitive landscape or reason

28:47.880 --> 28:50.720
to go reinventing it at this time.

28:50.720 --> 28:51.480
Sounds good.

28:51.480 --> 28:52.760
And I think that's all the time that we

28:52.760 --> 28:53.720
have on the live stream.

28:53.720 --> 28:55.840
Folks, you are welcome to stick around on IRC

28:55.840 --> 28:58.160
or come here on BBB and continue talking to Ian.

28:58.160 --> 28:59.560
Thank you, Ian.

28:59.560 --> 29:00.080
Wonderful.

29:00.080 --> 29:01.240
Thank you so much.

29:01.240 --> 29:02.240
Cheers.

29:11.560 --> 29:12.040
All right.

29:12.040 --> 29:13.880
I think the stream has moved on.

29:13.880 --> 29:15.960
Yeah, you're welcome to stay here, Ian, if you like,

29:15.960 --> 29:18.080
or just continue catching up with folks in IRC.

29:20.840 --> 29:21.320
Great.

29:21.320 --> 29:22.960
I will hang out here for a little bit

29:22.960 --> 29:28.360
in case someone wants to jump in and just write

29:28.360 --> 29:30.560
some stuff in the pad.

29:30.560 --> 29:31.360
Sounds good.

29:31.360 --> 29:31.880
Thank you.

29:31.880 --> 29:34.680
And I do see people are still writing or posting on the pad,

29:34.680 --> 29:35.600
so that's awesome.

29:35.600 --> 29:36.720
Yeah, sure thing.

29:36.720 --> 29:37.240
Awesome.

29:37.240 --> 29:38.120
Thank you so much.

29:38.120 --> 29:38.600
All right.

29:38.600 --> 29:38.960
Cheers.

29:38.960 --> 29:39.480
Welcome.

29:39.480 --> 29:41.480
And yeah, see you around on IRC.

29:41.480 --> 29:42.880
All right.

29:42.880 --> 30:11.440
All right.