chiark / gitweb /
3073c07d46c1c00acec6740f9294374f34cdfd68
[elogind.git] / TODO
1 Bugfixes:
2
3 * Should systemctl status \* work on all unit types, not just .service?
4
5 * Dangling symlinks of .automount unit files in .wants/ directories, set up
6   automount points even when the original .automount file did not exist
7   anymore. Only the .mount unit was still around.
8
9 * ExecStart with unicode characters fails in strv_split_quoted:
10
11           [Service]
12           Environment=ONE='one' "TWO='two two' too" THREE=
13           ExecStart=/bin/python3 -c 'import sys;print(sys.argv)' $ONE $TWO $THREE
14
15 * MEMORY return code is overloaded for syntax errors in the command line.
16   str_split_quoted() should return a real return code, so spawn_child can
17   report the failure properly.
18
19 External:
20
21 * Fedora: add an rpmlint check that verifies that all unit files in the RPM are listed in %systemd_post macros.
22
23 * Fedora: move kernel image to /usr/lib/modules/, kernel-install will take care of populating /boot
24
25 * Fedora: remove /etc/resolv.conf tmpfiles hack
26
27 * wiki: update journal format documentation for lz4 additions
28
29 * When lz4 gets an API for lz4 command output, make use of it to
30   compress coredumps in a way compatible with /usr/bin/lz4.
31
32 Features:
33
34 * The udev blkid built-in should expose a property that reflects
35   whether media was sensed in USB CF/SD card readers. This should then
36   be used to control SYSTEMD_READY=1/0 so that USB card readers aren't
37   picked up by systemd unless they contain a medium. This would mirror
38   the behaviour we already have for CD drives.
39
40 * We should remove really old cruft from cdrom_id
41
42 * nspawn: emulate /dev/kmsg using CUSE and turn off the syslog syscall
43   with seccomp. That should provide us with a useful log buffer that
44   systemd can log to during early boot, and disconnect container logs
45   from the kernel's logs.
46
47 * networkd/udev: implement SR_IOV configuration in .link files:
48   http://lists.freedesktop.org/archives/systemd-devel/2015-January/027451.html
49
50 * When RLIMIT_NPROC is set from a unit file it currently always is set
51   for root, not for the user set in User=, which makes it
52   useless. After fixing this, set RLIMIT_NPROC for
53   systemd-journal-xyz, and all other of our services that run under
54   their own user ids, and use User= (but only in a world where userns
55   is ubiquitous since otherwise we cannot invoke those daemons on the
56   host AND in a container anymore). Also, if LimitNPROC= is used
57   without User= we should warn and refuse operation.
58
59 * logind: maybe allow configuration of the StopTimeout for session scopes
60
61 * Set NoNewPriviliges= on all of our own services, where that makes sense
62
63 * Rework systemctl's GetAll property parsing to use the generic bus_map_all_properties() API
64
65 * rework journald sigbus stuff to use mutex
66
67 * import-dkr: support tarsum checksum verification, if it becomes reality one day...
68
69 * import-dkr: convert json bits to nspawn configuration
70
71 * import: support import from local files, and export to local files
72
73 * core/cgroup: support net_cls modules, and support automatically allocating class ids, then add support for making firewall changes depending on it, to implement a per-service firewall
74
75 * introduce systemd-nspawn-ephemeral@.service, and hook it into "machinectl start" with a new --ephemeral switch
76
77 * logind,machined: add generic catch-all polkit verbs for most privileged operations, similar to systemd itself
78
79 * "machinectl status" should also show internal logs of the container in question
80
81 * "machinectl list-images" should show os-release data, as well as machine-info data (including deployment level)
82
83 * nspawn: when start a container "foobar" look for its configuration in a file "foobar.nspawn" in /etc/systemd/nspawn/ as well as next to the actualy directory or image to boot
84
85 * Port various tools to make use of verbs.[ch], where applicable
86
87 * "machinectl history"
88
89 * "machinectl diff"
90
91 * "machinectl commit" that takes a writable snapshot of a tree, invokes a shell in it, and marks it read-only after use
92
93 * "machinectl status" should show 10 most recent log lines of both the host logs of the unit of the machine, plus the logs generated in the machine
94
95 * add transparent btrfs pool in a loopback file in /var if btrfs operations (such as systemd-import pull-dkr) are used and /var is not a btrfs file system
96
97 * systemd-nspawn -x should support ephemeral instances of gpt images
98
99 * move machinectl's mount and copy commands into machined
100
101 * hostnamectl: show root image uuid
102
103 * sysfs set api in libudev is not const
104
105 * Find a solution for SMACK capabilities stuff:
106   http://lists.freedesktop.org/archives/systemd-devel/2014-December/026188.html
107
108 * port libmount hookup to use API's own inotify interface, as soon as that is table in libmount
109
110 * "systemctl preset-all" should probably order the unit files it
111   operates on lexicographically before starting to work, in order to
112   ensure deterministic behaviour if two unit files conflict (like DMs
113   do, for example)
114
115 * resolved should optionally register additional per-interface LLMNR
116   names, so that for the container case we can establish the same name
117   (maybe "host") for referencing the server, everywhere.
118
119 * systemd-journal-upload (or a new, related tool): allow pushing out
120   journal messages onto the network in BSD syslog protocol,
121   continuously. Default to some link-local IP mcast group, to make this
122   useful as a one-stop debugging tool.
123
124 * synchronize console access with BSD locks:
125   http://lists.freedesktop.org/archives/systemd-devel/2014-October/024582.html
126
127 * as soon as we have kdbus, and sender timestamps, revisit coalescing multiple parallel daemon reloads:
128   http://lists.freedesktop.org/archives/systemd-devel/2014-December/025862.html
129
130 * set $REMOTE_IP (or $REMOTE_ADDR/$REMOTE_PORT) environment variable when doing per-connection socket activation. use format introduced by xinetd or CGI for this
131
132 * the install state probably shouldn't get confused by generated units, think dbus1/kdbus compat!
133
134 * in systemctl list-unit-files: show the install value the presets would suggest for a service in a third column
135
136 * we should try harder to collapse start jobs for swaps that end up being the same:
137   http://lists.freedesktop.org/archives/systemd-devel/2014-November/025359.html
138
139 * timedated should compensate on SetTime for the time spent in polkit
140
141 * figure out when we can use the coarse timers
142
143 * sd-resolve: drop res_query wrapping, people should call via the bus to resolved instead
144
145 * add "systemctl start -v foobar.service" that shows logs of a service
146   while the start command runs. This is non-trivial to do without
147   races though, since we should flush out all journal messages before
148   returning from the "systemctl stop".
149
150 * firstboot: make it useful to be run immediately after yum --installroot to set up a machine. (most specifically, make --copy-root-password work even if /etc/passwd already exists
151
152 * timesyncd + resolved: add ugly bus calls to set NTP and DNS servers per-interface, for usage by NM
153
154 * networkd-wait-online really should have a timeout by default
155
156 * add infrastructure to allocate dynamic/transient users and UID ranges, for use in user-namespaced containers, per-seat gdm login screens and gdm guest sessions
157
158 * machined: add an API so that libvirt-lxc can inform us about network interfaces being removed or added to an existing machine
159
160 * maybe add support for specifier expansion in user.conf, specifically DefaultEnvironment=
161
162 * code cleanup: retire FOREACH_WORD_QUOTED, port to unquote_first_word() loops instead
163
164 * introduce systemd-timesync-wait.service or so to sync on an NTP fix?
165
166 * systemd --user should issue sd_notify() upon reaching basic.target, not on becoming idle
167
168 * consider showing the unit names during boot up in the status output, not just the unit descriptions
169
170 * dhcp: do we allow configuring dhcp routes on interfaces that are not the one we got the dhcp info from?
171
172 * maybe allow timer units with an empty Units= setting, so that they
173   can be used for resuming the system but nothing else.
174
175 * what to do about udev db binary stability for apps? (raw access is not an option)
176
177 * maybe provide an API to allow migration of foreign PIDs into existing scopes.
178
179 * maybe support a new very "soft" reboot mode, that simply kills all processes, disassembles everything, flushes /run and sysvipc, and then reexecs systemd again
180
181 * man: document that corrupted journal files is nothing to act on
182
183 * man: maybe use the word "inspect" rather than "introspect"?
184
185 * "machinectl list" should probably show columns for OS version and IP addresses
186
187 * systemctl: if some operation fails, show log output?
188
189 * systemctl edit:
190 - allow creation of units from scratch
191 - use equvalent of cat() to insert existing config as a comment, prepended with #.
192   Upon editor exit, lines with one # are removed, lines with two # are left with one #, etc.
193
194 * refcounting in sd-resolve is borked
195
196 * exponential backoff in timesyncd and resolved when we cannot reach a server
197
198 * tmpfiles: port to unquote_many_words(), similar to sysusers
199
200 * unquote_many_words() should probably be used by a lot of code that
201   currently uses FOREACH_WORD and friends. For example, most conf
202   parsing callbacks should use it.
203
204 * merge ~/.local/share and ~/.local/lib into one similar /usr/lib and /usr/share....
205
206 * systemd.show_status= should probably have a mode where only failed
207   units are shown.
208
209 * networkd:
210   - add LLDP client side support
211   - the DHCP lease data (such as NTP/DNS) is still made available when
212     a carrier is lost on a link. It should be removed instantly.
213   - .network setting that allows overriding of the hostname to send to the dhcp server
214     http://lists.freedesktop.org/archives/systemd-devel/2014-July/021550.html
215   - expose in the API the following bits:
216         - option 15, domain name and/or option 119, search list
217         - option 12, host name and/or option 81, fqdn
218         - option 100, 101, timezone
219         - option 123, 144, geolocation
220         - option 252, configure http proxy (PAC/wpad)
221   - networkd's dhcp server should transparently pass on the DNS and
222     NTP server list it got from user configuration and its dhcp client
223     to clients. It should also pass on its own timezone information.
224   - provide a way to define a per-network interface default metric value
225     for all routes to it. possibly a second default for DHCP routes.
226   - allow Name= to be specified repeatedly in the [Match] section. Maybe also
227     support Name=foo*|bar*|baz ?
228
229 * resolved:
230   - put networkd events and rtnl events at a higher priority, so that
231     we always process them before we process client requests
232   - DNSSEC
233         - use base64 for key presentation?
234         - add display of private key types (http://tools.ietf.org/html/rfc4034#appendix-A.1.1)?
235         - add nice formatting of DNS timestamps
236   - DNS
237         - search paths
238   - mDNS/DNS-SD
239         - avahi compat
240   - DNS-SD service registration from socket units
241   - edns0
242   - dname
243   - cname on PTR (?)
244   - maybe randomize DNS UDP source ports
245   - maybe compare query section of DNS replies
246
247 * Allow multiple ExecStart= for all Type= settings, so that we can cover rescue.service nicely
248
249 * Add a new verb "systemctl top"
250
251 * add new gpt type for btrfs volumes
252
253 * support empty /etc boots nicely:
254   - nspawn/gpt-generator: introduce new gpt partition type for /usr
255   - fstab-generator: support systemd.volatile=yes|no|state on the kernel cmdline, too, similar to nspawn's --volatile=
256
257 * generator that automatically discovers btrfs subvolumes, identifies their purpose based on some xattr on them.
258
259 * timer units: actually add extra delays to timer units with high AccuracySec values, don't start them already when we are awake...
260
261 * a way for container managers to turn off getty starting via $container_headless= or so...
262
263 * figure out a nice way how we can let the admin know what child/sibling unit causes cgroup membership for a specific unit
264
265 * mount_cgroup_controllers(): symlinks need to get the label applied
266
267 * For timer units: add some mechanisms so that timer units that trigger immediately on boot do not have the services
268   they run added to the initial transaction and thus confuse Type=idle.
269
270 * Run most system services with cgroupfs read-only and procfs with a more secure mode (doesn't work, since the hidepid= option is per-pid-namespace, not per-mount)
271
272 * sd-event: generate a failure of a default event loop is executed out-of-thread
273
274 * add bus api to query unit file's X fields.
275
276 * consider adding RuntimeDirectoryUser= + RuntimeDirectoryGroup=
277
278 * sd-event: define more intervals where we will shift wakeup intervals around in, 1h, 6h, 24h, ...
279
280 * gpt-auto-generator:
281   - Support LUKS for root devices
282   - Define new partition type for encrypted swap? Support probed LUKS for encrypted swap?
283   - Make /home automount rather than mount?
284
285 * add generator that pulls in systemd-network from containers when
286   CAP_NET_ADMIN is set, more than the loopback device is defined, even
287   when it is otherwise off
288
289 * MessageQueueMessageSize= and RLimitFSIZE= (and suchlike) should use parse_iec_size().
290
291 * "busctl status" works only as root on dbus1, since we cannot read
292   /proc/$PID/exe
293
294 * implement Distribute= in socket units to allow running multiple
295   service instances processing the listening socket, and open this up
296   for ReusePort=
297
298 * socket units: support creating sockets in different namespace,
299   opening it up for JoinsNamespaceOf=. This would require to fork off
300   a tiny process that joins the namespace and creates/binds the socket
301   and passes this back to PID1 via SCM_RIGHTS. This also could be used
302   to allow Chown/chgrp on sockets without requiring NSS in PID 1.
303
304 * New service property: maximum CPU and wallclock runtime for a service
305
306 * introduce bus call FreezeUnit(s, b), as well as "systemctl freeze
307   $UNIT" and "systemctl thaw $UNIT" as wrappers around this. The calls
308   should SIGSTOP all unit processes in a loop until all processes of
309   it are fully stopped. This can later be used for app management by
310   desktop UIs such as gnome-shell to freeze apps that are not visible
311   on screen, not unlike how job control works on the shell
312
313 * cgroups:
314   - implement per-slice CPUFairScheduling=1 switch
315   - handle jointly mounted controllers correctly
316   - introduce high-level settings for RT budget, swappiness
317   - how to reset dynamically changed unit cgroup attributes sanely?
318   - when reloading configuration, apply new cgroup configuration
319   - when recursively showing the cgroup hierarchy, optionally also show
320     the hierarchies of child processes
321
322 * transient units:
323   - allow creating auxiliary units with the same call
324   - add field to transient units that indicate whether systemd or somebody else saves/restores its settings, for integration with libvirt
325   - ensure scope units may be started only a single time
326
327 * Automatically configure swap partition to use for hibernation by looking for largest swap partition on the root disk?
328
329 * when we detect low battery and no AC on boot, show pretty splash and refuse boot
330
331 * machined, localed: when we try to kill an empty cgroup, generate an ESRCH error over the bus
332
333 * libsystemd-journal, libsystemd-login, libudev: add calls to easily attach these objects to sd-event event loops
334
335 * be more careful what we export on the bus as (usec_t) 0 and (usec_t) -1
336
337 * unify dispatch table in systemctl_main() and friends
338
339 * rfkill,backlight: we probably should run the load tools inside of the udev rules so that the state is properly initialized by the time other software sees it
340
341 * After coming back from hibernation reset hibernation swap partition using the /dev/snapshot ioctl APIs
342
343 * If we try to find a unit via a dangling symlink, generate a clean
344   error. Currently, we just ignore it and read the unit from the search
345   path anyway.
346
347 * refuse boot if /etc/os-release is missing or /etc/machine-id cannot be set up
348
349 * btrfs raid assembly: some .device jobs stay stuck in the queue
350
351 * make sure gdm does not use multi-user-x but the new default X configuration file, and then remove multi-user-x from systemd
352
353 * man: the documentation of Restart= currently is very misleading and suggests the tools from ExecStartPre= might get restarted.
354
355 * load .d/*.conf dropins for device units
356
357 * allow implementation of InaccessibleDirectories=/ plus
358   ReadOnlyDirectories=... for whitelisting files for a service.
359
360 * sd-bus:
361   - GetAllProperties() on a non-existing object does not result in a failure currently
362   - kdbus: process fd=-1 for incoming msgs
363   - port to sd-resolve for connecting to TCP dbus servers
364   - kdbus: maybe add controlling tty metadata fields
365   - see if we can introduce a new sd_bus_get_owner_machine_id() call to retrieve the machine ID of the machine of the bus itself
366   - when kdbus does not take our message without memfds, try again with memfds
367   - see if we can drop more message validation on the sending side
368   - add API to clone sd_bus_message objects
369   - make AddMatch calls on dbus1 transports async?
370   - kdbus: matches against source or destination pids for an "strace -p"-like feel. Problem: The PID info needs to be available in userspace too...
371   - longer term: priority inheritance
372   - dbus spec updates:
373        - kdbus mapping
374        - NameLost/NameAcquired obsolete
375        - GVariant
376        - path escaping
377   - update systemd.special(7) to mention that dbus.socket is only about the compatibility socket now
378   - test bloom filter generation indexes
379   - bus-proxy: when passing messages from kdbus, make sure we properly
380     handle the case where a large number of fds is appended that we
381     cannot pass into sendmsg() of the AF_UNIX sokcet (which only accepts
382     253 messages)
383   - kdbus: introduce a concept of "send-only" connections
384   - kdbus: add counter for refused unicast messages that is passed out via the RECV ioctl. SImilar to the counter for dropped multicast messages we already have.
385
386 * sd-event
387   - allow multiple signal handlers per signal?
388   - document chaining of signal handler for SIGCHLD and child handlers
389
390 * in the final killing spree, detect processes from the root directory, and
391   complain loudly if they have argv[0][0] == '@' set.
392   https://bugzilla.redhat.com/show_bug.cgi?id=961044
393
394 * investigate endianness issues of UUID vs. GUID
395
396 * dbus: when a unit failed to load (i.e. is in UNIT_ERROR state), we
397   should be able to safely try another attempt when the bus call LoadUnit() is invoked.
398
399 * add a pam module that passes the hdd passphrase into the PAM stack and then expires it, for usage by gdm auto-login.
400
401 * add a pam module that on password changes updates any LUKS slot where the password matches
402
403 * maybe add a generator that looks for "systemd.run=" on the kernel cmdline for container usercases...
404
405 * cgtop: make cgtop useful in a container
406
407 * test/:
408   - add 'set -e' to scripts in test/
409   - make stuff in test/ work with separate output dir
410
411 * seems that when we follow symlinks to units we prefer the symlink
412   destination path over /etc and /usr. We should not do that. Instead
413   /etc should always override /run+/usr and also any symlink
414   destination.
415
416 * when isolating, try to figure out a way how we implicitly can order
417   all units we stop before the isolating unit...
418
419 * teach ConditionKernelCommandLine= globs or regexes (in order to match foobar={no,0,off})
420
421 * BootLoaderSpec: Clarify that the kernel has to be in $BOOT. Clarify
422   that the boot loader should be installed to the ESP. Define a way
423   how an installer can figure out whether a BLS compliant boot loader
424   is installed.
425
426 * think about requeuing jobs when daemon-reload is issued? usecase:
427   the initrd issues a reload after fstab from the host is accessible
428   and we might want to requeue the mounts local-fs acquired through
429   that automatically.
430
431 * systemd-inhibit: make taking delay locks useful: support sending SIGINT or SIGTERM on PrepareForSleep()
432
433 * journal-or-kmsg is currently broken? See reverted commit 4a01181e460686d8b4a543b1dfa7f77c9e3c5ab8.
434
435 * remove any syslog support from log.c -- we probably cannot do this before split-off udev is gone for good
436
437 * shutdown logging: store to EFI var, and store to USB stick?
438
439 * write UI tool that pops up emergency messages from the journal as notification
440
441 * think about window-manager-run-as-user-service problem: exit 0 → activate shutdown.target; exit != 0 → restart service
442
443 * merge unit_kill_common() and unit_kill_context()
444
445 * introduce ExecCondition= in services
446
447 * EFI:
448   - honor language efi variables for default language selection (if there are any?)
449   - honor timezone efi variables for default timezone selection (if there are any?)
450   - change bootctl to be backed by systemd-bootd to control temporary and persistent default boot goal plus efi variables
451
452 * maybe do not install getty@tty1.service symlink in /etc but in /usr?
453
454 * re-enable "make check" for gtk-doc (broken for unknown reason)
455
456 * fstab: add new mount option x-systemd-after=/foobar/waldo to allow manual dependencies to other mount points
457   https://bugzilla.redhat.com/show_bug.cgi?id=812826
458
459 * print a nicer explanation if people use variable/specifier expansion in ExecStart= for the first word
460
461 * mount: turn dependency information from /proc/self/mountinfo into dependency information between systemd units.
462
463 * logind:
464   - logind: optionally, ignore idle-hint logic for autosuspend, block suspend as long as a session is around
465   - When we update the kernel all kind of hibernation should be prohibited until shutdown/reboot
466   - logind: wakelock/opportunistic suspend support
467   - Add pretty name for seats in logind
468   - logind: allow showing logout dialog from system?
469   - we should probably handle SIGTERM/SIGINT to not leave dot files around, just in case
470   - session scopes/user unit: add RequiresMountsFor for the home directory of the user
471   - add Suspend() bus calls which take timestamps to fix double suspend issues when somebody hits suspend and closes laptop quickly.
472   - if pam_systemd is invoked by su from a process that is outside of a
473     any session we should probably just become a NOP, since that's
474     usually not a real user session but just some system code that just
475     needs setuid().
476   - logind: make the Suspend()/Hibernate() bus calls wait for the for
477     the job to be completed. before returning, so that clients can wait
478     for "systemctl suspend" to finish to know when the suspending is
479     complete.
480   - logind: when the power button is pressed short, just popup a
481     logout dialog. If it is pressed for 1s, do the usual
482     shutdown. Inspiration are Macs here.
483   - logind: allow users to kill or lock their own sessions
484   - expose "Locked" property on logind sesison objects
485   - given that logind now lets PID 1 do all nasty work, we can
486     probably reduce the capability set it retains substantially.
487     (we need CAP_SYS_ADMIN for drmSetMaster(), so maybe not worth it)
488   - expose orientation sensors and tablet mode through logind
489
490 * exec: when deinitializating a tty device fix the perms and group, too, not only when initializing. Set access mode/gid to 0620/tty.
491
492 * service: watchdog logic: for testing purposes allow ping, but do not require pong
493
494 * journal:
495   - consider introducing implicit _TTY= + _PPID= + _EUID= + _EGID= + _FSUID= + _FSGID= fields
496   - import and delete pstore filesystem content at startup
497   - journald: also get thread ID from client, plus thread name
498   - journal: when waiting for journal additions in the client always sleep at least 1s or so, in order to minimize wakeups
499   - add API to close/reopen/get fd for journal client fd in libsystemd-journal.
500   - fallback to /dev/log based logging in libsystemd-journal, if we cannot log natively?
501   - declare the local journal protocol stable in the wiki interface chart
502   - journal: reuse XZ context
503   - sd-journal: speed up sd_journal_get_data() with transparent hash table in bg
504   - journald: when dropping msgs due to ratelimit make sure to write
505     "dropped %u messages" not only when we are about to print the next
506     message that works, but alraedy after a short tiemout
507   - check if we can make journalctl by default use --follow mode inside of less if called without args?
508   - maybe add API to send pairs of iovecs via sd_journal_send
509   - journal: when writing journal auto-rotate if time jumps backwards
510   - journal: add a setgid "systemd-journal" utility to invoke from libsystemd-journal, which passes fds via STDOUT and does PK access
511   - journactl: support negative filtering, i.e. FOOBAR!="waldo",
512     and !FOOBAR for events without FOOBAR.
513   - journal: store timestamp of journal_file_set_offline() int he header,
514     so it is possible to display when the file was last synced.
515   - journal-send.c, log.c: when the log socket is clogged, and we drop, count this and write a message about this when it gets unclogged again.
516   - journal: find a way to allow dropping history early, based on priority, other rules
517   - journal: When used on NFS, check payload hashes
518   - journald: add kernel cmdline option to disable ratelimiting for debug purposes
519   - refuse taking lower-case variable names in sd_journal_send() and friends.
520   - journald: we currently rotate only after MaxUse+MaxFilesize has been reached.
521   - journal: deal nicely with byte-by-byte copied files, especially regards header
522   - journal: sanely deal with entries which are larger than the individual file size, but where the components would fit
523   - Replace utmp, wtmp, btmp, and lastlog completely with journal
524   - journalctl: instead --after-cursor= maybe have a --cursor=XYZ+1 syntax?
525   - when a kernel driver logs in a tight loop, we should ratelimit that too.
526   - journald: optionally, log debug messages to /run but everything else to /var
527   - journald: when we drop syslog messages because the syslog socket is
528     full, make sure to write how many messages are lost as first thing
529     to syslog when it works again.
530   - journald: make sure ratelimit is actually really per-service with the new cgroup changes
531   - change systemd-journal-flush into a service that stays around during
532     boot, and causes the journal to be moved back to /run on shutdown,
533     so that we do not keep /var busy. This needs to happen synchronously,
534     hence doing this via signals is not going to work.
535   - optionally support running journald from the command line for testing purposes in external projects
536   - journald: allow per-priority and per-service retention times when rotating/vacuuming
537   - journald: make use of uid-range.h to managed uid ranges to split
538     journals in.
539   - journalctl: add the ability to look for the most recent process of a binary. journalctl /usr/bin/X11 --pid=-1 or so...
540   - improve journalctl performance by loading journal files
541     lazily. Encode just enough information in the file name, so that we
542     do not have to open it to know that it is not interesting for us, for
543     the most common operations.
544
545 * document:
546   - document that deps in [Unit] sections ignore Alias= fields in
547     [Install] units of other units, unless those units are disabled
548   - man: clarify that time-sync.target is not only sysv compat but also useful otherwise. Same for similar targets
549   - document the exit codes when services fail before they are exec()ed
550   - document that service reload may be implemented as service reexec
551   - document in wiki how to map ical recurrence events to systemd timer unit calendar specifications
552   - add a man page containing packaging guidelines and recommending usage of things like Documentation=, PrivateTmp=, PrivateNetwork= and ReadOnlyDirectories=/etc /usr.
553   - document systemd-journal-flush.service properly
554   - documentation: recommend to connect the timer units of a service to the service via Also= in [Install]
555   - man: document the very specific env the shutdown drop-in tools live in
556   - man: extend runlevel(8) to mention that runlevels suck, and are dead. Maybe add runlevel(7) with a note about that too
557   - man: add more examples to man pages
558   - man: maybe sort directives in man pages, and take sections from --help and apply them to man too
559
560 * systemctl:
561   - systemctl list-jobs - show dependencies
562   - add systemctl switch to dump transaction without executing it
563   - Add a verbose mode to "systemctl start" and friends that explains what is being done or not done
564   - "systemctl disable" on a static unit prints no message and does
565     nothing. "systemctl enable" does nothing, and gives a bad message
566     about it. Should fix both to print nice actionable messages.
567   - print nice message from systemctl --failed if there are no entries shown, and hook that into ExecStartPre of rescue.service/emergency.service
568   - add new command to systemctl: "systemctl system-reexec" which reexecs as many daemons as virtually possible
569   - systemctl enable: fail if target to alias into does not exist? maybe show how many units are enabled afterwards?
570   - systemctl: "Journal has been rotated since unit was started." message is misleading
571   - support "systemctl stop foobar@.service" to stop all units matching a certain template
572   - Something is wrong with symlink handling of "autovt@.service" in "systemctl list-unit-files"
573   - better error message if you run systemctl without systemd running
574   - systemctl status output should should include list of triggering units and their status
575
576 * unit install:
577   - "systemctl mask" should find all names by which a unit is accessible
578     (i.e. by scanning for symlinks to it) and link them all to /dev/null
579   - systemctl list-unit-files should list generated files (and probably with a new state "generated" for them, or so)
580
581 * timer units:
582   - timer units should get the ability to trigger when:
583     o CLOCK_REALTIME makes jumps (TFD_TIMER_CANCEL_ON_SET)
584     o DST changes
585   - Support 2012-02~4 as syntax for specifying the fourth to last day of the month.
586   - calendarspec: support value ranges with ".." notation. Example: 2013-4..8-1
587   - when parsing calendar timestamps support the UTC timezone (even if we will not support arbitrary timezone specs, support UTC itself certainly makes sense), also support syntaxes such as +0200
588   - Modulate timer frequency based on battery state
589
590 * add libsystemd-password or so to query passwords during boot using the password agent logic
591
592 * If we show an error about a unit (such as not showing up) and it has no Description string, then show a description string generated form the reverse of unit_name_mangle().
593
594 * fedup: add --unit to systemctl switch-root somehow
595 * fedup: do not delete initrd on switch-root
596 * fedup: generator
597
598 * clean up date formatting and parsing so that all absolute/relative timestamps we format can also be parsed
599
600 * on shutdown: move utmp, wall, audit logic all into PID 1 (or logind?), get rid of systemd-update-utmp-runlevel
601
602 * make repeated alt-ctrl-del presses printing a dump, or even force a reboot without
603   waiting for the timeout
604
605 * hostnamed: before returning information from /etc/machine-info.conf check the modification data and reread. Similar for localed, ...
606
607 * currently x-systemd.timeout is lost in the initrd, since crypttab is copied into dracut, but fstab is not
608
609 * nspawn:
610   - refuses to boot containers without /etc/machine-id (OK?), and with empty /etc/machine-id (not OK).
611
612 * cryptsetup:
613   - cryptsetup-generator: allow specification of passwords in crypttab itself
614   - move cryptsetup key caching into kernel keyctl?
615     https://bugs.freedesktop.org/show_bug.cgi?id=54982
616   - support rd.luks.allow-discards= kernel cmdline params in cryptsetup generator
617
618 * hw watchdog: optionally try to use the preset watchdog timeout instead of always overriding it
619   https://bugs.freedesktop.org/show_bug.cgi?id=54712
620
621 * after deserializing sockets in socket.c we should reapply sockopts and things
622
623 * make timer units go away after they elapsed
624
625 * move PID 1 segfaults to /var/lib/systemd/coredump?
626
627 * create /sbin/init symlinks from the build system
628
629 * allow writing multiple conditions in unit files on one line
630
631 * MountFlags=shared acts as MountFlags=slave right now.
632
633 * drop PID 1 reloading, only do reexecing (difficult: Reload()
634   currently is properly synchronous, Reexec() is weird, because we
635   cannot delay the response properly until we are back, so instead of
636   being properly synchronous we just keep open the fd and close it
637   when done. That means clients do not get a successful method reply,
638   but much rather a disconnect on success.
639
640 * properly handle loop back mounts via fstab, especially regards to fsck/passno
641
642 * initialize the hostname from the fs label of /, if /etc/hostname does not exist?
643
644 * rename "userspace" to "core-os"
645
646 * load-fragment: when loading a unit file via a chain of symlinks
647   verify that it is not masked via any of the names traversed.
648
649 * introduce Type=pid-file
650
651 * change Requires=basic.target to RequisiteOverride=basic.target
652
653 * when breaking cycles drop sysv services first, then services from /run, then from /etc, then from /usr
654
655 * automount: implement expire:
656    - set superblock timeout AUTOFS_DEV_IOCTL_TIMEOUT_CMD
657    - periodically run AUTOFS_DEV_IOCTL_EXPIRE_CMD
658      - every timeout/4 (original autofs logic)
659      - blocking, needs a thread
660      - run until -EAGAIN
661    - receive expire packet on pipe if kernel tells the timeout is over
662      - call umount
663      - answer expire packet on pipe with AUTOFS_DEV_IOCTL_{READY,FAIL}_CMD
664    - AUTOFS_DEV_IOCTL_EXPIRE_CMD returns
665
666 * ExecOnFailure=/usr/bin/foo
667
668 * udev:
669   - move to LGPL
670   - kill scsi_id
671   - add trigger --subsystem-match=usb/usb_device device
672   - reimport udev db after MOVE events for devices without dev_t
673
674 * when a service has the same env var set twice we actually store it twice and return that in systemctl show -p... We should only show the last setting
675
676 * introduce mix of BindTo and Requisite
677
678 * There's currently no way to cancel fsck (used to be possible via C-c or c on the console)
679
680 * add option to sockets to avoid activation. Instead just drop packets/connections, see http://cyberelk.net/tim/2012/02/15/portreserve-systemd-solution/
681
682 * default unix qlen is too small (10). bump sysctl? add sockopt?
683
684 * save coredump in Windows/Mozilla minidump format
685
686 * support crash reporting operation modes (https://live.gnome.org/GnomeOS/Design/Whiteboards/ProblemReporting)
687
688 * default to actual 32-bit PIDs, via /proc/sys/kernel/pid_max
689
690 * be able to specify a forced restart of service A where service B depends on, in case B
691   needs to be auto-respawned?
692
693 * when a bus name of a service disappears from the bus make sure to queue further activation requests
694
695 * tmpfiles:
696   - apply "x" on "D" too (see patch from William Douglas)
697   - replace F with f+.
698   - instead of ignoring unknown fields, reject them.
699
700 * for services: do not set $HOME in services unless requested
701
702 * hide PAM options in fragment parser when compile time disabled
703
704 * when we automatically restart a service, ensure we restart its rdeps, too.
705
706 * allow Type=simple with PIDFile=
707   https://bugzilla.redhat.com/show_bug.cgi?id=723942
708
709 * move PAM code into its own binary
710
711 * implement Register= switch in .socket units to enable registration
712   in Avahi, RPC and other socket registration services.
713
714 * make sure systemd-ask-password-wall does not shutdown systemd-ask-password-console too early
715
716 * add ReloadSignal= for configuring a reload signal to use
717
718 * verify that the AF_UNIX sockets of a service in the fs still exist
719   when we start a service in order to avoid confusion when a user
720   assumes starting a service is enough to make it accessible
721
722 * Make it possible to set the keymap independently from the font on
723   the kernel cmdline. Right now setting one resets also the other.
724
725 * and a dbus call to generate target from current state
726
727 * GC unreferenced jobs (such as .device jobs)
728
729 * write blog stories about:
730   - hwdb: what belongs into it, lsusb
731   - enabling dbus services
732   - status update
733   - how to make changes to sysctl and sysfs attributes
734   - remote access
735   - how to pass throw-away units to systemd, or dynamically change properties of existing units
736   - testing with Harald's awesome test kit
737   - auto-restart
738   - how to develop against journal browsing APIs
739   - the journal HTTP iface
740   - non-cgroup resource management
741   - dynamic resource management with cgroups
742   - refreshed, longer missions statement
743   - calendar time events
744   - init=/bin/sh vs. "emergency" mode, vs. "rescue" mode, vs. "multi-user" mode, vs. "graphical" mode, and the debug shell
745   - how to create your own target
746   - instantiated apache, dovecot and so on
747   - hooking a script into various stages of shutdown/rearly booot
748
749 * allow port=0 in .socket units
750
751 * recreate systemd's D-Bus private socket file on SIGUSR2
752
753 * Support --test based on current system state
754
755 * investigate whether the gnome pty helper should be moved into systemd, to provide cgroup support.
756
757 * maybe introduce ExecRestartPre=
758
759 * dot output for --test showing the 'initial transaction'
760
761 * fingerprint.target, wireless.target, gps.target, netdevice.target
762
763 * systemd-python:
764    - figure out a simple way to wait for journal events in a way that
765      works with ^C
766    - add documentation to systemd.daemon
767
768 * bootchart:
769    - plot per-process IO utilization
770    - group processes based on service association (cgroups)
771    - document initcall_debug
772    - kernel cmdline "bootchart" option for simplicity?
773
774 * udev-link-config:
775    - Make sure ID_PATH is always exported and complete for
776      network devices where possible, so we can safely rely
777      on Path= matching
778    - check MTUBytes parsing (expecting size_t but we are using unsigned)
779
780 * sd-rtnl:
781    - add support for more attribute types
782    - inbuilt piping support (essentially degenerate async)? see loopback-setup.c and other places
783
784 * networkd:
785    - add more keys to [Route] and [Address] sections
786    - add support for more DHCPv4 options (and, longer term, other kinds of dynamic config)
787    - add proper initrd support (in particular generate .network/.link files based on /proc/cmdline)
788    - add reduced [Link] support to .network files
789    - add Scope= parsing option for [Network]
790    - properly handle routerless dhcp leases
791    - add more attribute support for SIT tunnel
792    - work with non-ethernet devices
793    - add support for more bond options
794
795 * networkd-wait-online:
796    - make operstates to wait for configurable?
797
798 * dhcp:
799    - figure out how much we can increase Maximum Message Size
800    - export timezone information
801    - support RFC4702 (pass FQDN)
802
803 * dhcp6:
804    - add functions to set previously stored IPv6 addresses on startup and get
805      them at shutdown; store them in client->ia_na
806    - write more test cases
807    - implement and do duplicate address detection, see rfc 4862, 5.4.
808    - implement reconfigure support, see 5.3., 15.11. and 22.20.
809    - implement support for temporary adressess (IA_TA)
810    - implement dhcpv6 authentication
811    - investigate the usefulness of Confirm messages; i.e. are there any
812      situations where the link changes without any loss in carrier detection
813      or interface down
814    - some servers don't do rapid commit without a filled in IA_NA, verify
815      this behavior
816
817 External:
818
819 * dbus:
820    - natively watch for dbus-*.service symlinks (PENDING)
821    - teach dbus to activate all services it finds in /etc/systemd/services/org-*.service
822
823 * fix alsa mixer restore to not print error when no config is stored
824
825 * make cryptsetup lower --iter-time
826
827 * patch kernel for xattr support in /dev, /proc/, /sys?
828
829 * kernel: add device_type = "fb", "fbcon" to class "graphics"
830
831 * drop accountsservice's StandardOutput=syslog and Type=dbus fields
832
833 * dbus upstream still refers to dbus.target and should not
834
835 * dbus: in fedora, make /var/lib/dbus/machine-id a symlink to /etc/machine-id
836
837 * add "# export SYSTEMD_PAGER=" to bash login
838
839 * /usr/bin/service should actually show the new command line
840
841 * fedora: suggest auto-restart on failure, but not on success and not on coredump. also, ask people to think about changing the start limit logic. Also point people to RestartPreventExitStatus=, SuccessExitStatus=
842
843 * fedora: F20: go timer units all the way, leave cron.daily for cron
844
845 * neither pkexec nor sudo initialize environ[] from the PAM environment?
846
847 * fedora: update policy to declare access mode and ownership of unit files to root:root 0644, and add an rpmlint check for it
848
849 * register catalog database signature as file magic
850
851 * zsh shell completion:
852   - <command> <verb> -<TAB> should complete options, but currently does not
853   - systemctl add-wants,add-requires
854
855
856 Regularly:
857
858 * look for close() vs. close_nointr() vs. close_nointr_nofail()
859
860 * check for strerror(r) instead of strerror(-r)
861
862 * Use PR_SET_PROCTITLE_AREA if it becomes available in the kernel
863
864 * pahole
865
866 * set_put(), hashmap_put() return values check. i.e. == 0 does not free()!
867
868 * use secure_getenv() instead of getenv() where appropriate
869
870 * link up selected blog stories from man pages and unit files Documentation= fields
871
872 Scheduled for removal or fixing:
873
874 * xxxOverridable dependencies (probably: fix)