RSystem Idea

About Bundles

Every folder that contains a valid data document is handled as a bundle. The data should contain the name and ID and some other related property like what headers to include for a library or what binary shoud be run as an opening action. See an example folder structure:

    Pass
  • data
    • bin
    • PassMacro
    • PassShell
    • lib
    • libPassMacro
    • libPassShell
    • inc
    • PassMacro
    • PassShell

Pass Data

name=Pass
ID=org.rudanium.pass
cmd pass=bin/PassMacro
cmd pash=bin/PassShell
lib pass=lib/PassMacro
lib pash=lib/PassShell
inc pass=inc/PassMacro
inc pash=inc/PassMacro

Based on the purpose of the bundle they should have the extension mod, lib, bin or app. Mod bundles would be kernel modules. Lib bundles should provide libraries and headers to be linked and develop with and shall contain binaries only for minor tasks related to the library. Similary bin bundles should only contain libraries for portability reasons and not listed in the linkeable items. Bundles with extension app indicate that they are rich GUI applications. So our previous example would be split up into two bundles where the bin would list the lib as a dependency.

    Pass.bin
  • data
    • bin
    • PassMacro
    • PassShell
    Pass.lib
  • data
    • lib
    • libPassMacro
    • libPassShell
    • inc
    • PassMacro
    • PassShell

Sandboxed Settings

Based on variant symbolic links all bundles would instantly contain four virtual folders: GlobalPersistent, GlobalTemporal LocalPersistent and LocalTemporal. Developers would not need to manually get the appropriate place to store caches and settings. It would simply be done by reading and writing in those folders.

    Pass.bin
  • data
    • bin
    • PassMacro
    • PassShell
  • GlobalPersistent = Persistent/System/org.rudanium.pass
  • GlobalTemporal = Temporal/System/org.rudanium.pass
  • LocalPersistent = Home/USER/Persistent/System/org.rudanium.pass
  • LocalTemporal = Home/USER/Temporal/System/org.rudanium.pass
  • GlobalPersistentDefault
  • GlobalTemporalDefault
  • LocalPersistentDefault
  • LocalTemporalDefault

Existing projects could be easily turned into bundles simply by adding the data. Version controlled project could contain the items for building and the sources and there would be no need to construct another structure for an application.

    Pass.lib
  • data
    • lib
    • libPassMacro
    • libPassShell
    • inc
    • PassMacro
    • PassShell
    • src
    • PassMacro
    • PassShell
    • make
    • make-release.sh
    • make-debug.sh

Applications developed following the bundle guideline would be easily located with its settings and every related data and maintained or uninstalled. Creating a package manager based on bundles would be simple. Even a compiler could be extended to have settings for using bundle libs with including and linking.

Command Lookup

Looking up commands could be based on bundles. Commands marked as binaries in bundles that are in the PATH could be executed from anywhere. Traditional simple executable in the PATH would also work but would be non-standard. This would result a more organized structure for tools and libraries. Every command to be used could be mapped.

Bin Data

name=Pass Tools
ID=org.rudanium.bin.pass
cmd pass=bin/PassMacro
cmd pash=bin/PassShell

Lib Data

name=Pass Libraries
ID=org.rudanium.lib.pass
lib pass=lib/PassMacro
lib pash=lib/PassShell
inc pass=inc/PassMacro
inc pash=inc/PassMacro

System Files

The structure would be based on the bundle concept. Compat would contain bundles to aid compatibility. System would be the place for the core bundles and some built-in application. User bundles would be any other third party applications installed on the system.

    Root
  • Compat
  • System
  • User
  • Home
    • Persistent
    • Compat
    • System
    • User
    • Temporal
    • Compat
    • System
    • User

These folders would contain subfolders to separate kernel modules, libraries, command-line tools and applictions. These subfolders would contain the bundles. The Home directory would contain the user account folders but this could be setup to be on another device or partition for example.

    System
    • Module
    • org.rudanium.coremodules.mod
    • org.rudanium.videodrivers.mod
    • other module bundles
    • Library
    • org.rudanium.system.lib
    • org.rudanium.audio.lib
    • org.rudanium.gui.lib
    • other library bundles
    • Binary
    • org.rudanium.shell.bin
    • org.rudanium.tools.bin
    • org.rudanium.comp.bin
    • other binary bundles
    • App
    • EMailClient.app
    • TextEditor.app
    • Calculator.app
    • other app bundles