(→TODOS) |
(→Other) |
||
Line 96: | Line 96: | ||
=== Other === | === Other === | ||
TBD: geolocation, containers | TBD: input methods, geolocation, containers | ||
== Core Applications == | == Core Applications == |
Revision as of 21:51, 13 February 2014
Fedora Workstation Technical Specification
Core Services and Features
This section should describe the core services of the platform and their intended use. The items here should refer back to the PRD for a functional justification.
Service management
Systemd provides ways to control and monitor the activity and status of system services, resources they require, etc. System services are expected to provide systemd units. See the systemd documentation.
Logging
The systemd journal will be used as the local storage backend for system logs. For 'managed' scenarios (e.g the 'developer in a large organization' use case of the PRD), it will be possible to collect the logs in a centralized location, off the local machine.
Applications and services can either use the syslog API or the journal APIs for their logging. See the journal API documentation.
Networking
Network devices and connections will be controlled by NetworkManager. This includes support for VPN, which is relevant for 'corporate' scenarios. Applications are advised to use higher-level APIs (such as GNetworkMonitor in GIO) to monitor online status.
Firewall
The firewall will be controlled by firewalld.
Session tracking
Logind will be used as the session tracking facility.
Applications that need to interact with sessions can use the logind library API, the D-Bus API, or a higher-level API
Account handling
SSSD is providing the backing storage for identity management. For 'managed' scenarios (e.g. the 'developer in a large organization' use case of the PRD), it will be possible to configure it to rely on a directory service for this information. The accountsservice is providing a D-Bus interface for user account information; this may be integrated into SSSD at some point.
Depending on their needs, application and services can either use the POSIX APIs (getpwent(), etc) or the accountsservice D-Bus interface to obtain user information.
Software updates
dnf will be used to obtain and install software updates for packaged applications and the OS itself. The recommendation for applications is to use the PackageKit APIs to interact with the underlying packaging system.
Miscellaneous system information
System locale, timezone, hostname, etc. will be managed through the services provided by systemd for this purpose. See developer documentation for localed, timedated and hostnamed
Virtualization
libvirt-daemon will be used to manage virtualization capabilities.
Display manager
gdm will be used as the display manager. It is responsible for showing a login screen on each seat. It will be able to launch both X-based sessions and Wayland sessions.
Desktop environments are expected to make themselves known as an available session option on the login screen by dropping a .desktop file into /usr/share/xsessions (or its wayland equivalent).
Other facilities provided by the display manager include screen unlock authentication and user switching.
Accessibility
The accessibility support in the workstation includes a screen reader, a high-contrast theme and a zoom capability, amongst others. The screen reading is provided through orca, which runs as a session service and requires the at-spi infrastructure. Applications are expected to provide suitable information to the screen reader via the toolkit's accessibility support. Applications are also expected to work acceptably in the high-contrast theme. The zoom is implemented in the desktop shell and does not need any application support.
Graphics
The workstation session will switch to using a Wayland compositor as soon as feasible. Until then, it will be based on X11. Even after the switch, an X server will be included, so applications can either connect to Wayland natively, or run as an X client.
Media support
Sound hardware and audio streams will be managed by pulseaudio. Applications are recommended to use the gstreamer framework for media playback.
Appearance
The workstation will ship with a single theme, which will have support for the included toolkits: gtk3, qt and gtk2. Applications are expected to work well with this theme, as well as with the high-contrast theme that is used for accessibility. The theme will include a dark variant that applications can opt into using (this is most suitable for certain content-focused applications). The theme also includes an icon theme that provides named icons according to the icon-naming spec, plus symbolic variants.
Application Integration
Installed applications are expected to install a desktop file in /usr/share/applications and an application icon in the hicolor icon theme.
Packaged applications are also expected to provide appdata for use in the application installer.
System Installer
The desired installation experience for the workstation product is to limit the pre-installation user interaction to the minimum. The storage configuration UI should be focused on the classes of hardware that are expected in workstation-class machines. Package selection is not necessary, the installer will install the workstation product as defined. Tweaks, customizations and software additions should be performed after the installation.
One aspect of storage configuration that will be needed is support for dual-boot setups (preserving preexisting Windows or OS X installations), since e.g. students may be required to run software on those platforms for their coursework.
gnome-initial-setup already provides support for post-install user creation, language selection, timezone configuration, etc. If necessary, it should be extended to cover all required setup tasks.
Other
TBD: input methods, geolocation, containers
Core Applications
Application installer
gnome-software will serve as graphical application installer, offering to install and remove applications, system extensions and add-ons (such as fonts, or codecs) and other optional software. To be presented in the application installer, applications need to provide appdata.
Web Browser
firefox will be used as the web browser.
Terminal emulator
gnome-terminal will be installed as a simple terminal. More powerful options, such as terminator, can be investigated.
Virtualization frontend
gnome-boxes will be available for the creation and use of vms, as well as for connecting to remote systems, e.g. ovirt.
TODO
- editor
Core Package list
List the core packages of the product. This list includes all packages that will be shipping on the core media. This is the mandatory minimal list of packages that needs to be installed on a system at all times for it to qualify as a Fedora workstation install. This package list will be the priority focus for QA and bug fixing.
Package list
Here is the full list of packages that are installed as dependencies of systemd, gdm, gnome-shell, gtk3, orca, control-center, qt (qt5-qtbase and qt5-qtdeclarative), firewalld, gnome-boxes, gnome-terminal, firefox, gstreamer1-plugins-good
sgabios-bin at-spi2-atk setup libcgroup libgusb telepathy-filesystem iproute libcanberra-gtk3 heisenbug-backgrounds-gnome lvm2 gnome-keyring linux-firmware bluez-libs libnm-gtk nss-softokn-freebl totem-pl-parser gnome-themes-standard ncurses-libs numad pyatspi pcre qemu-kvm libxml2 libgovirt gnome-session-xsession libcom_err tracker realmd shared-mime-info libvirt-client libsoup p11-kit libvirt-daemon geoclue libICE libvirt-daemon-driver-secret upower libgcrypt radvd xorg-x11-server-utils freetype gnome-boxes kernel libuuid fedora-bookmarks libvisual libgdata popt libsecret gnome-settings-daemon hunspell-en-US libtalloc libXau brltty libXfixes festival-speechtools-libs libXdamage festival libXinerama python3-gobject libplist libwbclient libtool-ltdl libunistring libtasn1 libwnck3 nss-softokn libgomp mozjs24 cups-pk-helper orc sox harfbuzz flite harfbuzz-icu libgnomekbd ca-certificates orca libXxf86misc xcb-util-renderutil startup-notification qt5-qtbase-gui acl dbus-python libdb-utils iptables desktop-file-utils ebtables diffutils libnl3 mozjs17 caribou avahi-libs yajl abattis-cantarell-fonts device-mapper-event-libs libproxy clutter-gtk libverto boost-system libsamplerate gvnc libxshmfence snappy libthai libee libXdmcp lzop openssl-libs nmap-ncat cracklib-dicts spice-server libmount crontabs shadow-utils gnutls-dane util-linux cryptopp libusbx iscsi-initiator-utils cups-libs logrotate fedora-logos glusterfs curl qemu-img newt-python qemu-common openssl tcp_wrappers fipscheck-lib fuse-libs cryptsetup-libs libexif polkit gettext-libs mesa-libEGL quota pango which librsvg2 libgcc dbus-x11 fontpackages-filesystem gtk2 filesystem accountsservice-libs basesystem colord-libs libX11-common gcr heisenbug-backgrounds-base libwacom-data dconf mobile-broadband-provider-info gnome-keyring-pam hwdata gnome-bluetooth-libs ncurses-base gjs glibc-common adwaita-gtk2-theme libstdc++ gnome-desktop3 bash pygobject3 libsepol libselinux dbus-libs rtkit nspr gnome-session info libwacom libffi PackageKit-glib glib2 trousers atk glib-networking libwayland-client libgweather json-glib geocode-glib audit-libs rest libogg libimobiledevice libgpg-error kpartx libwayland-cursor mcpp libpng xorg-x11-xinit mesa-libwayland-egl dracut libxkbcommon pulseaudio libSM gnome-terminal gnome-bluetooth sqlite libvpx gstreamer1-plugins-base libattr gnome-online-accounts libacl evolution-data-server chkconfig sed gdm-libs libvorbis libnotify grep gdm hunspell hunspell-en bzip2-libs libtevent libxcb python3 libXext brlapi libXrender gupnp libXi libXcomposite festvox-slt-arctic-hts libXcursor gupnp-av libxkbfile python3-cairo telepathy-glib python3-pyatspi mesa-libglapi pytalloc libicu samba-libs libcap-ng libsmbclient libtdb wavpack libical libXres libXxf86vm avahi-glib lua nm-connection-editor libidn dotconf kmod-libs rygel redhat-menus libgtop2 tcp_wrappers-libs libao graphite2 festival-freebsoft-utils pixman newt espeak gnome-menus python3-speechd p11-kit-trust control-center nettle xorg-x11-xkb-utils libXevie xcb-util jasper-libs enchant libmetalink libxslt cyrus-sasl-lib libtheora libgee cpio make findutils xml-common libxklavier psmisc lyx-fonts ncurses libmodman libpciaccess json-c gdbm libsndfile qrencode-libs speex jbigkit-libs gdk-pixbuf2 sbc cdparanoia-libs ustr krb5-libs nss-tools cracklib openldap libpwquality libuser coreutils pam libutempter nss-sysinit pulseaudio-libs alsa-lib gnome-icon-theme pulseaudio-libs-glib2 python libssh2 liboauth rpm-libs color-filesystem pygobject3-base libXft authconfig procps-ng fipscheck device-mapper-libs systemd libgudev1 polkit-pkla-compat mesa-libgbm libcanberra cairo cairo-gobject NetworkManager-glib fuseiso seabios-bin cyrus-sasl-md5 seavgabios-bin linux-atm-libs libcue device-mapper-persistent-data net-snmp-libs corosynclib lua-socket libquvi kbd-legacy initscripts cyrus-sasl qemu-system-x86 sheepdog pm-utils poppler-data poppler-glib bzip2 gnutls-utils libvirt-glib dmidecode libvirt-daemon-driver-nodedev libvirt-daemon-driver-interface libvirt-daemon-driver-storage libdaemon libvirt-daemon-driver-network libvirt-daemon-kvm cheese-libs liblouis-python3 qt5-qtbase xcb-util-image xcb-util-wm mesa-libGLES qt5-qtdeclarative python-six python-decorator libnetfilter_conntrack libselinux-python python-slip-dbus firewalld clutter caribou-gtk2-module python-caribou libiscsi numactl-libs usbredir libibverbs libpcap mutter libevent iptables-services libvirt-gconfig libosinfo lzo libtirpc libwsman1 libestr leveldb libgxps gtk-vnc2 mutter-wayland ldns lvm2-libs clutter-gst2 fedora-release-rawhide cronie unbound-libs libseccomp dnsmasq ceph-libs quota-nls lua-lpeg libusal rsyslog glusterfs-libs glusterfs-fuse glusterfs-api libcacard spice-gtk3 file-libs ipxe-roms-qemu augeas-libs exempi SDL parted giflib gmime gettext e2fsprogs-libs libiptcdata nfs-utils fuse at-spi2-core control-center-filesystem libfdt accountsservice tzdata enca gtk3 adwaita-cursor-theme lua-expat bluez mozilla-filesystem corosync adwaita-gtk3-theme emacs-filesystem libquvi-scripts colord glibc hostname pycairo xz-libs vte3 zlib kbd GConf2 nss-util poppler ibus-libs pkgconfig autogen-libopts gnutls gobject-introspection libvirt-gobject geoclue2 libwayland-server libvirt-daemon-driver-nwfilter usbmuxd libdb mtools libmcpp gsettings-desktop-schemas libvirt-daemon-driver-qemu hardlink expat gnome-shell pulseaudio-module-bluetooth readline firefox webkitgtk3 libcap zenity dbus-glib gstreamer1 pulseaudio-gdm-hooks libjpeg-turbo python3-libs libX11 gssdp libXrandr festival-lib libXtst python3-brlapi libXt libldb gmp samba-common lcms2 glx-utils libXmu vino libcroco gupnp-dlna kmod colord-gtk elfutils-libelf slang speech-dispatcher xorg-x11-xauth liblouis telepathy-logger qt5-qtxmlpatterns libXv xcb-util-keysyms hunspell-en-GB libnfnetlink desktop-backgrounds-gnome libmnl flac-libs python-slip ModemManager-glib libevdev gawk caribou-gtk3-module iso-codes libaio xz celt051 webrtc-audio-processing librdmacm libasyncns openjpeg-libs gsm opus keyutils-libs libarchive libtiff libqb libwebp rpcbind libsemanage boost-thread gzip device-mapper-event systemd-libs fedora-release nss cronie-anacron libblkid kbd-misc fontconfig libgsf hicolor-icon-theme lua-json python-libs rsyslog-mmjsonparse libcurl glusterfs-devel rpm spice-glib gnome-icon-theme-symbolic genisoimage sound-theme-freedesktop netcf-libs device-mapper libnfsidmap dbus iputils libdrm taglib mesa-libGL keyutils cogl libdv gstreamer1-plugins-good libshout libv4l libiec61883 libavc1394 libraw1394
TODOS
- do we need to pin down versions ?
- add vpn packages
Policies for software add-ons
General rules and policies for how extra software is installed and what requirements are put on that software.
- Optional software must not interfere with the regular functionality of mandatory components. E.g. installing optional audio software must not prevent other applications from using pulseaudio and gstreamer for media playback.
- Optional software should integrate properly into the defined extension points of the OS:
- Applications should provide desktop files and icons
- Applications should provide appdata (link?) for the software installer
- System services should provide systemd units
- Desktop environments should provide a desktop file in /usr/share/xsessions
- It must be possible to remove optional software from the system again
Engineering Roadmap
Not sure if we want this section here or if we should just make this a pure description document and put the implementation roadmap in a separate document.