desktop revision 1.6 1 1.6 gutterid $NetBSD: desktop,v 1.6 2022/01/15 19:38:05 gutteridge Exp $
2 1.1 dholland
3 1.1 dholland NetBSD Desktop Roadmap
4 1.1 dholland ======================
5 1.1 dholland
6 1.1 dholland This roadmap deals with desktop support. Note that "desktop support"
7 1.1 dholland means several quite different things:
8 1.1 dholland - issues pertaining to running the Windows-like Linux desktops
9 1.6 gutterid (e.g., GNOME, KDE, MATE, Xfce, LXQt, LXDE, DeforaOS, as well as
10 1.6 gutterid others not presently successfully packaged, like Cinnamon, Lumina,
11 1.6 gutterid and Trinity) on NetBSD in more or less their current form;
12 1.1 dholland - issues pertaining to running these systems with NetBSD
13 1.1 dholland infrastructure, for better system integration and to avoid
14 1.1 dholland depending on unpopular packages like dbus and policykit;
15 1.1 dholland - issues specific to developer-oriented desktops;
16 1.1 dholland - other issues pertaining to using a NetBSD machine as one's desktop
17 1.1 dholland login system, regardless of the UI;
18 1.1 dholland - issues pertaining to running or developing a more Unix-oriented
19 1.1 dholland desktop environment, which is kind of blue-sky for the time being.
20 1.1 dholland
21 1.1 dholland Also, "desktop support" and "laptop support" are closely related in
22 1.1 dholland the sense that in the conventional wisdom laptops run more or less the
23 1.1 dholland same user-facing software as desktops. Additional specifically laptop-
24 1.1 dholland related issues, such as power management, are discussed in the
25 1.1 dholland "mobile" roadmap (q.v.).
26 1.1 dholland
27 1.1 dholland Furthermore, many of the above issues can be ~orthogonally divided
28 1.1 dholland into one of the following three broad categories:
29 1.1 dholland
30 1.1 dholland a. Providing new infrastructure for supporting facilities whose
31 1.1 dholland needs are reasonably well understood but are not traditionally
32 1.1 dholland handled by Unix and/or are not currently handled by NetBSD, or
33 1.1 dholland where traditional/existing support is chronically defective.
34 1.1 dholland Examples include font management, printing, mounting removable
35 1.1 dholland media, and also things like support for location services.
36 1.1 dholland
37 1.1 dholland b. Providing new infrastructure for supporting facilities whose
38 1.1 dholland needs are not in fact well understood. This tends to cover the
39 1.1 dholland domains where we don't like the GNOME/KDE/Linux tools, like
40 1.1 dholland dbus, as well as things that existing desktop environments fall
41 1.1 dholland down on entirely, like integrating with large home directory
42 1.1 dholland trees.
43 1.1 dholland
44 1.1 dholland c. Refactoring existing infrastructure (whether NetBSD-specific or
45 1.1 dholland historical Unix) to integrate new facilities and software models
46 1.1 dholland smoothly instead of bolting layers of crud on top of outdated
47 1.1 dholland structure. Examples include revisiting the assumption that
48 1.1 dholland logins happen on teletypes, and facing the need to restrict the
49 1.1 dholland access of large applications rather than giving them all the
50 1.1 dholland privileges of the user starting them.
51 1.1 dholland
52 1.1 dholland
53 1.1 dholland The following elements, projects, and goals are relatively near-term:
54 1.1 dholland
55 1.6 gutterid 1. Making removable media work using GNOME/KDE infrastructure
56 1.6 gutterid 2. Making wireless config work using GNOME/KDE infrastructure
57 1.6 gutterid 3. Sane font handling
58 1.6 gutterid 4. Get Eclipse running properly from pkgsrc
59 1.6 gutterid 5. Better printer management
60 1.6 gutterid 6. Work out a long-term plan for compositing, Wayland, and graphics
61 1.1 dholland architecture issues
62 1.1 dholland
63 1.1 dholland The following elements, projects, and goals are longer-term:
64 1.1 dholland
65 1.6 gutterid 7. Publish/subscribe sockets or IPC
66 1.6 gutterid 8. Better native RPC library and tools
67 1.6 gutterid 9. Native removable media handling
68 1.6 gutterid 10. Native wireless config
69 1.6 gutterid 11. User switching and secure attention key
70 1.6 gutterid 12. wscons graphics
71 1.1 dholland
72 1.1 dholland The following elements, projects, and goals are rather blue-sky so far:
73 1.1 dholland
74 1.6 gutterid 13. Something akin to ARexx
75 1.6 gutterid 14. A more Unix-oriented root window/desktop basis
76 1.6 gutterid 15. Full console virtualization
77 1.1 dholland
78 1.1 dholland
79 1.1 dholland Explanations
80 1.1 dholland ============
81 1.1 dholland
82 1.1 dholland
83 1.6 gutterid 1. Making removable media work using GNOME/KDE infrastructure
84 1.1 dholland
85 1.1 dholland Ideally when you insert a USB stick it mounts automatically, like with
86 1.1 dholland GNOME and KDE on Linux. I believe this is not currently working. It
87 1.1 dholland used to depend on hal, which was always problematic and perennially
88 1.1 dholland broken, but hal got deprecated and I'm not sure what is even involved.
89 1.1 dholland (XXX: someone please clarify.)
90 1.1 dholland
91 1.1 dholland
92 1.6 gutterid 2. Making wireless config work using GNOME/KDE infrastructure
93 1.1 dholland
94 1.1 dholland Ideally it would be possible to configure your wireless networking
95 1.1 dholland using the GNOME/KDE/etc. tools. I believe this does not work either.
96 1.1 dholland (XXX: someone please clarify.)
97 1.1 dholland
98 1.1 dholland
99 1.6 gutterid 3. Sane font handling
100 1.1 dholland
101 1.1 dholland See "System-level font handling in Unix" on the wiki projects page.
102 1.1 dholland
103 1.1 dholland - As of January 2017 nobody is actively working on this.
104 1.1 dholland - There is currently no clear timeframe or release target.
105 1.1 dholland - Contact: dholland
106 1.1 dholland
107 1.1 dholland
108 1.6 gutterid 4. Get Eclipse running properly from pkgsrc
109 1.1 dholland
110 1.1 dholland As of last report Eclipse was bodgily packaged (this may not be
111 1.1 dholland fixable) and didn't really work (this should be). Because Eclipse is
112 1.1 dholland Java this depends on JDK stuff.
113 1.1 dholland
114 1.1 dholland - As of January 2017 nobody is actively working on this.
115 1.1 dholland - There is currently no clear timeframe or release target.
116 1.1 dholland - Contact: ? (XXX)
117 1.1 dholland
118 1.1 dholland
119 1.6 gutterid 5. Better printer management
120 1.1 dholland
121 1.1 dholland See "New LPR/LPD for NetBSD" on the wiki projects page.
122 1.1 dholland
123 1.1 dholland - As of January 2017 nobody is actively working on this.
124 1.1 dholland - There is currently no clear timeframe or release target.
125 1.1 dholland - Contact: dholland
126 1.1 dholland
127 1.1 dholland
128 1.6 gutterid 6. Work out a long-term plan for compositing, Wayland, and graphics
129 1.1 dholland architecture issues
130 1.1 dholland
131 1.1 dholland Nobody seems to have a good idea of what the way forward ought to be,
132 1.1 dholland so probably it would be advisable for someone to dig into the issues
133 1.1 dholland and report back.
134 1.1 dholland
135 1.1 dholland - As of January 2017 nobody is actively working on this.
136 1.1 dholland - There is currently no clear timeframe or release target.
137 1.1 dholland - Contact: ? (XXX)
138 1.1 dholland
139 1.1 dholland
140 1.6 gutterid 7. Publish/subscribe sockets or IPC
141 1.1 dholland
142 1.1 dholland It's clear that even though traditionally Unix has next to no such
143 1.1 dholland facilities, a "modern" desktop system requires the ability to post
144 1.1 dholland notices about from one component to another. (Probably the closest
145 1.1 dholland thing traditional Unix ever had along these lines was comsat(8).)
146 1.1 dholland
147 1.1 dholland dholland observed some time back that there isn't really a problem if
148 1.1 dholland what you want to do is contact a well-known service: we have inetd for
149 1.1 dholland that, and while inetd could use some polishing before being deployed
150 1.1 dholland for such purposes that isn't a very big deal. The interesting case is
151 1.1 dholland multicast: when you want to send a notice to anyone who happens to be
152 1.1 dholland around and interested in seeing notices of some particular type,
153 1.1 dholland without needing to know who they are.
154 1.1 dholland
155 1.1 dholland dbus does this badly, both because the implementation is poor and
156 1.1 dholland because the basic concept of a "message bus" is flawed. A better model
157 1.1 dholland is publish-subscribe channels: a message sent ("published") on the
158 1.1 dholland channel is delivered to all listeners ("subscribers"), and neither the
159 1.1 dholland publishers nor the subscribers need to know about one another, only
160 1.1 dholland about the existence of the channel... which becomes effectively a well
161 1.1 dholland known service.
162 1.1 dholland
163 1.1 dholland The original (very tentative) plan was to wedge publish/subscribe into
164 1.1 dholland AF_UNIX sockets, because AF_UNIX sockets already satisfy several
165 1.1 dholland important criteria: (1) they have a large and flexible namespace,
166 1.1 dholland namely the whole file system namespace; (2) they support credential
167 1.1 dholland reporting; (3) the socket/bind/listen/connect API (probably) provides
168 1.1 dholland enough flexibility to handle the connection model; and (4) they
169 1.1 dholland already exist. However, nobody has yet looked into this very closely
170 1.1 dholland and the interface may not turn out to be very suitable after all.
171 1.1 dholland
172 1.1 dholland Note that (like anything of this sort) the naming scheme for the
173 1.1 dholland channels is critical, as is the development of sane protocols to run
174 1.1 dholland over them. Note that the publish/subscribe sockets should be transport
175 1.1 dholland only; protocols should be a higher-level issue. (This is one of a
176 1.1 dholland number of things dbus gets wrong.)
177 1.1 dholland
178 1.1 dholland One of the other things this infrastructure should provide is a decent
179 1.1 dholland way to post notices (e.g. for media changes, device insertions, and so
180 1.1 dholland on) out of the kernel, which has historically always been a problem in
181 1.1 dholland Unix.
182 1.1 dholland
183 1.1 dholland This item is sometimes also referred to as "dbus avoidance" -
184 1.1 dholland theoretically one could avoid dbus with some other architecture too,
185 1.1 dholland but nothing much else has been proposed.
186 1.1 dholland
187 1.1 dholland An example application we already have in base is the notices that
188 1.1 dholland sshd sends to blacklistd. Currently this makes a mess if sshd is
189 1.1 dholland running and blacklistd isn't.
190 1.1 dholland
191 1.1 dholland - As of January 2017 nobody is actively working on this.
192 1.1 dholland - There is currently no timeframe or release target.
193 1.1 dholland - Contact: dholland
194 1.1 dholland
195 1.1 dholland
196 1.6 gutterid 8. Better native RPC library and tools
197 1.1 dholland
198 1.1 dholland Another thing dbus doesn't do very well: it's an IPC/RPC library. In
199 1.1 dholland the long run to support existing desktops we probably need
200 1.1 dholland dbus-compatible IPC tools. In the short run though we'd do well to
201 1.1 dholland pick or develop something of our own, and (finally) deprecate SunRPC.
202 1.1 dholland
203 1.1 dholland - As of January 2017 nobody is actively working on this.
204 1.1 dholland - There is currently no timeframe or release target.
205 1.1 dholland - Contact: dholland or ? (XXX)
206 1.1 dholland
207 1.1 dholland
208 1.6 gutterid 9. Native removable media handling
209 1.1 dholland
210 1.1 dholland Given publish/subscribe channels, implement proper native support for
211 1.1 dholland mounting removable media upon insertion. This should integrate with
212 1.1 dholland GNOME/KDE/etc. but also work natively; e.g. provided the right
213 1.1 dholland services are running, it should work even when running on a text-only
214 1.1 dholland console.
215 1.1 dholland
216 1.1 dholland
217 1.6 gutterid 10. Native wireless config
218 1.1 dholland
219 1.1 dholland Similarly, implement a native wireless config scheme. While we
220 1.1 dholland currently have wpa_cli, it lacks a certain something...
221 1.1 dholland
222 1.1 dholland
223 1.6 gutterid 11. User switching and secure attention key
224 1.1 dholland
225 1.1 dholland See the project page on the wiki.
226 1.1 dholland
227 1.1 dholland - As of January 2017 nobody is actively working on this.
228 1.1 dholland - There is currently no timeframe or release target.
229 1.1 dholland - Contact: dholland or ? (XXX)
230 1.1 dholland
231 1.1 dholland
232 1.6 gutterid 12. wscons graphics
233 1.1 dholland
234 1.1 dholland There's been talk on and off for some time about supporting cairo or
235 1.1 dholland qt-embedded or similar things directly on the console. This is
236 1.1 dholland probably a good infrastructure step for any UI scheme that doesn't
237 1.1 dholland involve an X server, such as potentially phones or tablets. (See the
238 1.1 dholland "mobile" roadmap for more on that.)
239 1.1 dholland
240 1.1 dholland
241 1.6 gutterid 13. Something akin to ARexx
242 1.1 dholland
243 1.1 dholland We have a number of veteran Amiga users and whenever there's a
244 1.1 dholland discussion of dbus usually ARexx eventually comes up. It would be
245 1.1 dholland great to have something like ARexx for talking to/scripting/
246 1.1 dholland controlling applications. But given that GNOME and KDE and their
247 1.1 dholland imitations are all based on Windows and that the state of the art
248 1.1 dholland seems to be dbus, if we want this we're going to have to design and
249 1.1 dholland build it out ourselves. It would be a good thing to do.
250 1.1 dholland
251 1.1 dholland Just remember that the good parts of ARexx didn't include the Rexx
252 1.1 dholland language. :-)
253 1.1 dholland
254 1.1 dholland - As of January 2017 nobody is actively working on this.
255 1.1 dholland - There is currently no timeframe or release target.
256 1.1 dholland - Contact: mlelstv? (XXX)
257 1.1 dholland
258 1.1 dholland
259 1.6 gutterid 14. A more Unix-oriented root window/desktop basis
260 1.1 dholland
261 1.1 dholland All the existing desktops (apart from OS X, which is NextStep, but not
262 1.1 dholland all that much different either) are based on Windows. They share a
263 1.1 dholland number of properties that are not consistent with the Unix philosophy
264 1.1 dholland or design model.
265 1.1 dholland
266 1.3 leot First, Unix is about files, and like it or not, files in Unix are
267 1.1 dholland organized in a hierarchical namespace. The Windows-like desktops, like
268 1.1 dholland Windows, provide a file manager as an afterthought and the desktop
269 1.1 dholland workspace itself has no notion of current directory, no notion of
270 1.1 dholland directory navigation, and only limited notions of interacting with
271 1.1 dholland files at all. In fact, the things that show up on the desktop
272 1.1 dholland typically live in a reserved directory that the desktop software
273 1.1 dholland insists on polluting your homedir with. A Unix desktop should have
274 1.1 dholland directory navigation integrated with the root window somehow -- there
275 1.1 dholland are many possible ways to do this, and virtually any choice would be
276 1.1 dholland better than what you get from GNOME and KDE. It shouldn't be necessary
277 1.1 dholland to open a shell (or a "file manager") to work effectively with a large
278 1.1 dholland source tree.
279 1.1 dholland
280 1.1 dholland Second, Unix is also about text, and existing desktop software is not.
281 1.1 dholland While people tend to think of GUIs and text as mutually exclusive,
282 1.1 dholland this is not actually the case: a GUI provides a lot of ways to place
283 1.1 dholland and format text that can't be done in text mode (let alone on a
284 1.1 dholland teletype) -- a good start, for example, might be to display the first
285 1.1 dholland few lines of a file when you roll the mouse over it, but one can go a
286 1.1 dholland lot further than that.
287 1.1 dholland
288 1.1 dholland Third, Unix is supposed to be about pluggable components. A Unix
289 1.1 dholland desktop should have functionality for plugging components together
290 1.1 dholland graphically, whether those components are traditional shell tools or
291 1.1 dholland "services" or "objects" or more complex things. No existing desktop
292 1.1 dholland has anything like this, certainly not as native functionality.
293 1.1 dholland
294 1.1 dholland Anything like this is going to have to be designed and written, since
295 1.1 dholland it's clearly not going to be forthcoming from the Linux desktop folks.
296 1.1 dholland (Note that while it would be a big effort it would also be a great
297 1.1 dholland publicity lever...)
298 1.1 dholland
299 1.1 dholland
300 1.6 gutterid 15. Full console virtualization
301 1.1 dholland
302 1.1 dholland The Unix notion of a login session is stuck in the 70s, where you log
303 1.1 dholland in on a glass teletype and that's all you get. The consoles of modern
304 1.1 dholland computers have assorted other widgets as well: pointing devices, game
305 1.1 dholland controllers, cameras, scanners, removable storage, hotkeys, audio
306 1.1 dholland playback and record... not to mention graphics and video. Right now we
307 1.1 dholland have a bodgy scheme for chowning or chmod'ing devices on console
308 1.1 dholland login; in addition to potentially causing problems (what happens if
309 1.1 dholland one user leaves a process behind that's recording audio, then logs out
310 1.1 dholland and walks away?) this doesn't work well with multiple users logged in
311 1.1 dholland at once on the console. It also doesn't work at all with remote logins.
312 1.1 dholland
313 1.1 dholland In an ideal world, all your console hardware would be tied to your
314 1.1 dholland console login session, and virtualized appropriately so that multiple
315 1.1 dholland console logins each get suitably arbitrated access. Furthermore, it
316 1.1 dholland should be possible to forward your console hardware to a remote login
317 1.1 dholland session -- for example if you have a usb stick you should be able to
318 1.1 dholland log in somewhere and mount it there.
319 1.1 dholland
320 1.1 dholland Getting to this requires refactoring the way we think about logins and
321 1.1 dholland login devices, but it's high time.
322