
 Note that items with (!) have high priority.

cal
---
   - add option to print calendar in vertical way
     https://github.com/karelzak/util-linux/issues/604
   - support another --reforms, see for example freebsd version
     https://github.com/freebsd/freebsd/blob/master/usr.bin/ncal/ncal.c#L72

column
------
   - add option to NOT ignore empty lines
     https://github.com/karelzak/util-linux/issues/593

script
------
   - think about optional "event" records in timing file to save information
     about non-data changes like signals (SIGWINCH, SIGSTOP, SIGCONT, etc.)
     in format:

             <time> 0 <name>[: var=data, ...]

     for example:

	     0.001296 256
	     0.001297   0 SIGWINCH: columns=50, lines=20
	     0.000010 275

lsblk
-----
   - rewrite lsblk to read all devices tree to memory to make it more extendable. Now
     it always keep in memory just one device (only final output is buffered by
     libsmartcols, but this stuff are output strings, nothing else).

     See fopr example: https://github.com/karelzak/util-linux/issues/616


lscpu
-----
  - read cpuid and uname information from file if --sysroot is specified, then
    we can prepare regression tests completely independent on hw and architecture.

lsblk
-----
  - re-write the way how lsblk internally holds info about devices. Now we
    compose only output (by libsmartcols). It would be better to have in memory
    complete tree of the devices and generate the output from this tree. It will
    make code more readable and allow to generate output in more ways -- for
    example for RAIDs (https://github.com/karelzak/util-linux/issues/616)

  - currently it does not show mountpoint for all devices in btrfs RAID. It's because
    /proc/#/mountinfo contains reference to the one device only. Maybe we can add some
    btrfs specific code to provide a better output for FS based stacks. Not sure.
    https://bugzilla.redhat.com/show_bug.cgi?id=1084453

nsenter(1)
----------
 - read the default UID and GID from the target process.
   http://thread.gmane.org/gmane.linux.utilities.util-linux-ng/9553/focus=9585

hwlock
------
 - use /var/lib/hwclock/drift to store hw-clock drift numbers.
 - use /etc/adjtime as read-only for UTC/LOCAL information only
 - the /var/lib/hwclock/drift should be implemented backwardly compatible,
   it means use the file only if exists, otherwise follow /etc/adjtime 

bash completion
---------------
- Optional argument handling requires user to press backspace to get
  argument completion.
- Comma separated value, e.g., --output 'value1,value2', are not
  completed for users.

libmount (mount/umount)
-----------------------

 - remount all filesystems given their type, for example:
        mount -a -t tmpfs -o remount
   It should be probably enough to add remount_all() to mount(8) in way we
   already have mount_all().  https://github.com/karelzak/util-linux/issues/589

 - add --onlyonce to force mount(8) to check if mountpoint is already used. Now
   "already mounted" detection is used for --all only. The problem is if you
   call "mount <mountpoint>" more than once for in fstab defined tmpfs (or network
   filesystem etc.). In this case kernel does not return EBUSY, but a new instance
   of the FS is created. https://github.com/karelzak/util-linux/issues/448
   (... just idea, maybe wrong idea)

 - support CAP_SYS_ADMIN; for mount(2) syscall the CAP_SYS_ADMIN is good
   enough. Unfortunately, mount(8) does more things like check for filesystem
   type (but it's usually done by udev, so root perms are unnecessary), create
   loop devices, write to /run/mount/utab or /etc/mtab, etc.

   It would be nice to improve libmount to check for CAP_SYS_ADMIN if suid not
   set and allow to use it for simple tasks where no another operation is
   necessary.

partx
-----

 - support mapping by device-mapper if argv[0] is "kpartx" or --dm option is used.
     

docs
----

 - (!) use something better than gtk-doc for libmount and libblkid (doxyden?)

 - (!) add API documentation to libuuid

exit codes
----------

  - we need coreutils-like exit codes for failed exec(). See:
    https://www.spinics.net/lists/util-linux-ng/msg12776.html
    and original attempt:
    https://github.com/karelzak/util-linux/pull/311

login-utils:
-----------

  - consolidate newgrp(1)
    * we have "su --group/--supp-group" to switch between groups, newgrp(1) in
      util-linux and shadow-utils (and sg(1) alias in shadow-utils)
    * the unique functionality provided by newgpr(1) is support for group
      passwords [/etc/gshadow] -- do we really need this functionality?
    * maybe we can mark group-passwords as deprecated, and replace sg(1) and
      newgpr(1) with su(1) code. The another way is to ask for group password in
      su --group too.
    * note that shadow-utils newgpr(1) provides support for syslog and audit log.


libblkid
--------

 - (!) add support for BitLocker Drive Encryption 
   https://github.com/karelzak/util-linux/issues/617
   https://github.com/libyal/libbde/blob/master/documentation/BitLocker%20Drive%20Encryption%20(BDE)%20format.asciidoc

 - (!) add support for dasd PT (used for example on s390)

libfdisk
--------

 - add support for Apple Partition Map (see libblkid/src/partitions/mac.c)
   http://en.wikipedia.org/wiki/Apple_Partition_Map

fdisk
-----
 
 - When creating a new partition, it would be helpful if the "Last sector"
   dialog accepted negative numbers, to be able to specify how far from the
   end of the drive you would like the partition to end.

misc
----

 - add mllockall() and SCHED_FIFO to hwclock,
   see http://lkml.org/lkml/2008/10/12/132
 

---------------
exotic requests
---------------

 - add SELinux security contexts support to the 'ipcs' utility
   http://bugzilla.redhat.com/show_bug.cgi?id=225342

   Would be great to list the current system IPC Objects with their respective
   security labels (where allowed) with something like 'ipcs -Z' - following the
   way other tools reports those.


