Skip to content

Components

probonopd edited this page Nov 30, 2021 · 31 revisions

This is a work-in progress description of which components could be used to put together helloSystem.

Note: This page reflects brainstorming of potential components for helloSystem. The components that have been decided on are marked with ➡️.

Core OS

  • FreeBSD - Liberal license, great ZFS experience, slowly-changing, complete operating system system, no different competing distributions. Big advantage: There is one way how things are done (e.g., set the keyboard language), one location in which files are. Not different ones like with different Linux distributions. This makes the job of writing that sits on top much easier. Possible alternatives: NetBSD? (Runs on more hardware types). ➡️ FreeBSD was chosen
  • https://github.com/furybsd/furybsd-livecd - Builds Live ISOs for FreeBSD, is customizable. Live system can be booted from ISO file using https://www.ventoy.net/ which allows one to have multiple Live ISOs in parallel. Live system optionally can be installed to disk. Current issues: Without Ventoy, copies the whole ISO to RAM before booting. Possible alternatives: NomadBSD, GhostBSD? ➡️ The helloSystem Live ISO build system is based on FuryBSD, and helloSystem is using some code (initgfx) from NomadBSD. GhostBSD is not interested in becoming a generic Live ISO build system

GUI toolkit

  • Qt 5 - Most cross-platform applications are written in it. Unlike Gtk, it is also not tied to many of the unwelcome technologies.
  • QtPlugin - A custom Qt plugin that makes the global menu work and allows us to set our own theme, which largely just applies a user-editable QSS style sheet

Desktop environment

  • A custom shell script that launches a few services and that keeps running as long as the desktop session is running. Advantage: Very lightweight, easy to understand what is going on. Possible alternatives: LxQt or Lumina (Lightweight and based on Qt 5), Xfce (Gtk would bring in Gnome-related dependencies), KDE (would violate the "software minimalism" principle) ➡️ start-hello launches a custom session for helloSystem using various hand-picked and partly custom-made components

Display manager ("login box")

  • sddm - Qt based. ➡️ slim was chosen for helloSystem because it is lightweight.

Window manager

  • To be defined - No pure Qt solution known so far. Lumina uses fluxbox (window decorations don't look native and there is no window snap), NomadBSD uses openbox (window decorations don't look native and there is no window snap). kwin_x11 draws in many Kf5 dependencies but can do animations, window snap, Exposé, and has compositing features built in. ➡️ KWin.app (with manually downstripped dependencies) is being used now.

Compositor

  • compton - Drop shadows. Possible alternatives: kwin_x11, Compiz ➡️ picom is being used for now.

File manager

  • https://github.com/probonopd/filer/ - Very lightweight. Opinionated fork of PCManFM supporting AppDir. Can render the desktop, too. Current issues: Dependency on glib through libfm, limited Drag and Drop so far. Possible alternatives: lumina-fm (minimal, no glib dependency), https://github.com/probonopd/dfilemanager (more powerful, but does not build on FreeBSD yet) ➡️ Filer in helloSystem was forked from PCManFM

Global menubar

Dock

  • https://github.com/probonopd/cyber-dock - Almost pure Qt/Qml solution. Latte Dock performance not good in FreeBSD. Deepin's dock (probably depends on dde dependencies)? ➡️ Dock was forked from cyber-dock

Folders in the Dock

Search and application launcher

  • Qt version of Drill to be written? - Possible alternatives: Drill (would look non-native since not written in Qt) ➡️ The search box in Menu now also acts as an application launcher, and applications are in the System menu

Browser

  • Chromium or Falkon ➡️ Falkon is being used for now because it is written in Qt and integrates into Menu nicely.

Utilities

  • qterminal ➡️ qterminal is the default terminal
  • lumina-archiver
  • lumina-calculator
  • lumina-config
  • lumina-fileinfo
  • lumina-info
  • lumina-mediaplayer
  • lumina-open
  • lumina-pdf
  • lumina-photo
  • lumina-screenshot
  • lumina-search
  • lumina-textedit
  • lumina-xconfig

Also check the Deepin tools. They depend on dde, however.

Fonts

Application delivery format

  • Think about merging the best aspects of AppDir, AppImage, ZFS deduplication, and PBI https://2011.eurobsdcon.org/papers/moore/eurobsdcon2011-pbi9-kpm.pdf but keep in mind https://unix.stackexchange.com/questions/244039/pc-bsd-pbi-what-reasons-made-it-to-be-scrapped. Something along the lines of: A filesystem image of a major version of FreeBSD gets union-mounted with the contents of an AppDir/AppImage, and can be its only allowed dependency. Then the whole thing gets executed as a jail. We want to achieve a) one app = one file/folder, b) multiple app versions in parallel, c) embrace much as possible the existing pkg infrastructure by building only a light layer around it for "app compartmentailzation" ➡️ Simplified .app bundles are used in helloSystem
  • port install - it's FreeBSD after all.
  • Linux AppImages - May be useful for applications that have not been ported to FreeBSD yet.

Application Suites

➡️ These are "light-installed" which means that they appear in the Menu and have icons but need to be downloaded upon first use.

Libre Graphics Suite

Complete application suites (additional ISO)

https://github.com/AppImage/AppImageKit/wiki/Libre-Graphics-Suite

  • Scribus
  • Inkscape (despite Gtk)
  • Krita
  • Possibly Gimp (despite Gtk; has overlap with Krita, do we still need it?)

Libre Video Suite

  • OBS
  • Kdenlive

Libre Office Suite

  • LibreOffice

3D Printing Suite

  • FreeCAD
  • Cura
  • Possibly PrusaSlicer

Development Suite

  • Qt Creator
  • Arduino IDE
  • Golang
  • LiteIDE

To be considered

https://www.deepin.org/en/developer-community/architectural-design/