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