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