
CVSID:$Id: TODO,v 1.8 2004/01/18 00:05:08 david Exp $

This document is the TODO list for the HAL project. Feel free to add/remove
entries if you get an idea or implement one of the tasks.

Resolved
========

 - Add void PropertyModified(string key, bool is_added, bool is_removed)
   and deprecate Property[Added,Removed,Changed]
   RESOLVED

 - Add infrastructure so updates to several properties happen as a single
   transaction
   RESOLVED

 - figure a way to detect block.device (e.g. /udev/hda2, already we know 
   major:minor) when detecting a block device on hald startup.
   The hotplug case is already solved by receiving a signal from udev. Might
   need to modify udev to be able to do something like
   'udev --get-device --major <num> --minor <num>'
   RESOLVED: udev-012 and onwards support querying

 - until available in sysfs, parse /proc/sys/dev/cdrom/info, to provide
   information about capabilities of optical discs such as CD-RW, DVD etc.
   RESOLVED: patches from hadess

Partially resolved
==================

 - work more on packaging, put some daemon-fork-fu into hald and make it
   read a configuration file, make initscripts for various distros and make
   hald run as a unprivileged dedicated user
   ISSUE: still needs to run as root to do ethernet link detection, mii style

 - Make all optional properties from the spec available but with empty values
   ISSUE: need to audit all the code

 - Make sure device is not added to GDL before all the key properties as
   specified in the spec is there
   ISSUE: resolved for block devices, need to audit other bus + classes

Short term issues
=================

 - veryify that we got all the necessary hardware parameters for
   physical busses, e.g. pci, usb... We won't really know before people
   start using HAL though

 - add device persistency across invocations of the hal daemon so we
   don't have to scan N fdi files for M devices, resulting in N*M scans

 - fix all property string values to be UTF8 compliant

 - add Lock()/Unlock() methods to the network API (and libhal) for obtaining
   exclusive device access (useful for burning CD's)

 - fix memory leaks; especially those when getting strings from D-BUS
   [ongoing, partially resolved (libhal seems clean, still need to audit
    hald)]

 - add a device representing the computer system with properties on kernel
   name, version, xserver version etc. Make all devices that currently doesn't
   have a parent, children of this

 - extend .fdi file format to be able to reference the device representing
   the computer system and match on e.g. kernel.name and kernel.version, so
   as to merge properties dependent on that

 - replace mii ethernet monitoring with netlink sockets


More long term issues
=====================

 - signing of fdi files

 - add code/scripts for regression testing

 - access control logic (only daddy can use daddy's camera etc.). To come
   from distros?

 - network transparency; think diskless X terminals with USB ports
   integrated into the desktop environment running on a LTSP server

 - get HAL to work on other OS'es than those based on Linux 2.6

 - lots of other 'crazy ideas'

Fishy issues we need to work around, and don't yet do in a perfectly
reliable way (Linux 2.6 specific)

 - userspace is faster than kernel when hotplugging, so sometimes certain
   attrs are missing; should be addressed in libsysfs 0.4. Seems also to
   be a problem with /proc/bus/usb/devices; sometimes information derived
   from /p/b/u/d such as USB version and USB speed is missing because of
   this issue

 - input hotplugging not giving same range of attrs as on detection time;
   need support for input in sysfs

 - various key bus-specific properties missing all over the place, 
   especially for SCSI (I also need SCSI hardware to test with)

 - sysfs is missing key information only available in /proc such as USB
   version and speed (/proc/bus/usb/devices), model of IDE disk (e.g.
   /proc/ide/hda/model), optical drive caps (/proc/sys/dev/cdrom/info).
   Until this is fixed we have to read stuff from /proc.
