% // vim: set ft=tex:

\newglossaryentry{bbox} {
    name = {busybox},
    long = {BusyBox: The Swiss Army Knife of Embedded \gls{LX}},
    description = {%
        BusyBox combines tiny versions of many common UNIX utilities into a single small executable%
    },
    first = {\glsentrylong{bbox}}
}

\newglossaryentry{Rust} {
    name = {Rust},
    long = {the Rust programming language},
    description = {%
        Statically typed programming language that uses a new concept of variable ownership and reference tracking. Largely explain in \cref{context::rust}.
    },
    first = {\glsentrylong{Rust}}
}

\newglossaryentry{proglang} {
    name = {programming language},
    description = {%
        A well-defined language used to write software. Hundreds of language exists, each with focus on different aspects like comfort for humans, size, speed, safety, etc.
    },
}


\newglossaryentry{compiler}{
    name = compiler,
    long = {source- to machine-code compiler},
    description = {%
        A program that can transform software source code to executable machine code.
        Typically targetted for a \glsentryname{proglang} or a family of \glspl{proglang}.
    },
    first = {\glsentrylong{compiler}}
}

\newglossaryentry{addrspace}{
    name = address space,
    long = bound address range in memory,
    description = {%
        A logical entity that represents a section of memory, specified with a start address and either by end address or length given in a standardize unit
    },
    first = {\glsentrylong{addrspace}}
}

\newglossaryentry{stack}{
    name = stack,
    description = {%
        TODO
    },
}

\newglossaryentry{sf}{
    name = stack-frame,
    description = {%
        Procedure data and meta-data (see \cref{lst:amd64-stack-frame-components})%
    },
}

\newglossaryentry{heap}{
    name = heap,
    description = {%
        TODO
    },
}

\newglossaryentry{api}{
    name = API,
    long = {Application Programming Interface},
    description = {%
    },
    first = {\glsentrylong{api}}
}

\newglossaryentry{os}{
    name = OS,
    long = Operating System,
    description = {%
        The software that manages the system's hardware ressources.
        Other \glspl{app} can access the ressources only through the interface provided by the \gls{os}.
    },
    first = {\glsentrylong{os}}
}


\newglossaryentry{fs}{
    name = filesystem,
    description = {%
        TODO
    },
}

\newglossaryentry{virt}{
    name = virtualization,
    description = {%
        TODO
    },
}

\newglossaryentry{OSS}{
    name = Open-Source Software,
    description = {%
        TODO
    },
}

\newglossaryentry{osvirt}{
    name = Operating System-Level Virtualization,
    description = {%
        TODO
    },
}

\newglossaryentry{hypervisor}{
    name = Hypervisor,
    description = {%
        TODO
    },
}

\newglossaryentry{VM}{
    name = Virtual Machine,
    description = {%
        TODO
    },
}

\newglossaryentry{LX}{
    name = Linux,
    description = {%
        is a generic term referring to the family of Unix-like
        computer operating systems that use the Linux kernel
    },
    plural=Linuces
}

\newglossaryentry{android}{
    name = Android,
    description = {a mobile \gls{os} based on \gls{LX}},
    first = {\glsentryname{android}, \glsentrydesc{android}},
}


\newglossaryentry{imezzos}{
    name = intermezzOS,
    description = {%
        TODO
    },
}

\newglossaryentry{redoxos}{
    name = Redox OS,
    description = {%
        TODO
    },
}

\newglossaryentry{blogos}{
    name = Blog OS,
    description = {%
        TODO
    },
}

\newglossaryentry{tockos}{
    name = Tock OS,
    description = {%
        TODO
    },
}

\newglossaryentry{rootfs}{
    name = RootFS,
    description = {%
        % TODO
    },
}

\newglossaryentry{lxns}{
    name = Linux Namespace,
    description = {%
        entitiy that holds a specific set of process attributes and can be set per process
    },
}

\newglossaryentry{lxcap}{
    name = Linux Capability,
    description = {%
        entitiy that holds a specific set of process attributes and can be set per process, mainly to establish a relationship between processes and \gls{os} resources
    },
    plural = Linux Capabilities,
}

\newglossaryentry{lxvfs}{
    name = Linux VFS,
    description = {%
        Virtual Filesystem Switch, a filesystem abstraction layer in \gls{LX}.
    },
}

\newglossaryentry{BSD}{
    name = BSD,
    description = {%
        TODO
    }
}

\newglossaryentry{computer}{
    name = Computer,
    description = {%
        is a programmable machine that receives input,
        stores and manipulates data, and provides
        output in a useful format
    }
}


\newglossaryentry{pm}{
    name = package manager,
    description = {%
        TODO
    }
}

\newglossaryentry{sac}{
    name = Software Application Container,
    description = {%
        The broad term for the technology used to build, package, distribute and run an application program in isolation from the underlying and co-existing systems, wherein the level or technique of isolation can be different depending on the \gls{sacr}.
        The term is nuanced from \gls{appc} defined by the \gls{appcorg}.
        The \gls{appcorg} is a community driven effort to create an open, standardized specification for developers and users of \gls{sac} technology.
        Such independent standards are required to form interoperability between \gls{sac} implementations made by independent parties.
        Some implementations will be subject to more detailed examination in Part \ref{part:research}.
    }
}
\newglossaryentry{saci}{
    name = Software Application Container Image,
    description = {%
        An archive file that contains all of the necessary binaries that are needed to execute an application and a manifest file that that contains metadata about the application. Alternatively to containing all the required binary files, the manifest file can declare dependencies to other application container images, which must then be available at runtime to execute the contained application.
    }
}

\newglossaryentry{sacr}{
    name = Software Application Container Runtime,
    description = {%
        An application program (suite) that understands how to run the software inside an \gls{saci}.
    }
}

\newglossaryentry{LXC}{
    name = LXC,
    description = {%
        TODO
    }
}

\newglossaryentry{Docker}{
    name = Docker,
    description = {%
        A very popular \gls{sac} platform and application suite, providing functionality to build and deploy Docker specific \glspl{saci}.
    }
}

\newglossaryentry{systemd-nspawn}{
    name = systemd-nspawn,
    description = {%
        TODO
    }
}

\newglossaryentry{rkt}{
    name = rkt,
    description = {%
        TODO
    }
}

\newglossaryentry{appcorg}{
    name = App Container Organisation,
    description = {%
        Organisation for the App Container specification, including the schema and associated tooling.
    }
}

\newglossaryentry{appc}{
    name = App Container,
    description = {%
        Specific variant of an \glsentrytext{sac} defined by the \glsentrytext{appcorg}.
    }
}

\newglossaryentry{NVD}{
    name = {NVD},
    description = {https://nvd.nist.gov/},
    long = {National Vulnerability Database},
    first = {\glsentrylong{NVD}}
}

\newglossaryentry{CWE}{
    name = {CWE™},
    long = Common Weakness Enumeration,
    description = {a community-developed list of common software security weaknesses. It serves as a common language, a measuring stick for software security tools, and as a baseline for weakness identification, mitigation, and prevention efforts},
    first = {\glsentrylong{CWE}, "\glsentrydesc{CWE}"\cite{MITRE-CWE}}
}

\newglossaryentry{CWE-633}{
    name = CWE-633,
    description = {Weaknesses in this category affect memory resources},
    first = {CWE-633: \glsentrydesc{CWE-633}\cite{MITRE-CWE-633}}
}

\newglossaryentry{CWE-119}{
    name = CWE-119,
    long = {CWE-119: \glsentrydesc{CWE-119}},
    description = {Improper Restriction of Operations within the Bounds of a Memory Buffer},
    first = {\glsentrylong{CWE-119}\cite{MITRE-CWE-119}}
}

\newglossaryentry{C}{
    name = C,
    , description = {%
        TODO C programming language,
    }
}

\newglossaryentry{C++}{
    name = C++,
    , description = {%
        A \glsentrytext {proglag} based on \glsentrytext{C}, enahnced by features like object-orientation, lambdas, and much more.
    }
}

\newglossaryentry{asm}{
    name = Assembly programming language,
    description = {%
        TODO ASM
    }
}

\newglossaryentry{amd64}{
    name = AMD64,
    long = AMD64,
    description = {%
        TODO AMD64
    },
    first = {\glsentrylong{amd64}},
}

\newglossaryentry{cpu}{
    name = CPU,
    long = Central Processing Unit,
    description = {%
        TODO cpu
    },
    first = {\glsentrylong{cpu}},
}


\newglossaryentry{tlb}{
    name = TLB,
    long = Translation Lookaside Buffer,
    description = {%
        TODO tlb
    },
    first = {\glsentrylong{tlb}},
}

\newglossaryentry{MMU}{
    name = MMU,
    long = Memory Management Unit,
    description = {%
        TODO MMU
    },
    first = {\glsentrylong{MMU}},
}

\newglossaryentry{sysadmin}{
    name = System Administrator
    , description = {%
        TODO sysadmin
    }
}

\newglossaryentry{realtime}{
    name = realtime
    , description = {%
        TODO realtime
    }
}

\newglossaryentry{app}{
    name = software-application,
    description = {%
        A bundle of one or multiple programs with a common use-case that can be run on an \gls{os}.
    }
}

\newglossaryentry{task}{
    name = task 
    , description = {%
    Generic term for any unit of work to be executed on the.
        In the context of this thesis, it may be used for any of \glsentrytext{program}, \glsentrytext{process}, \glsentrytext{thread}. 
    }
}

\newglossaryentry{program}{
    name = program 
    , description = {%
        A group of instructions that can be executed by the \glsentryname{cpu}.
    }
}

\newglossaryentry{process}{
    name = process
    , description = {%
         A Program in execution.
    }
}

\newglossaryentry{thread}{
    name = thread 
    , description = {%
        A defined path of instructions within a process.
        It can span from a part of a procedure up to the whole program of the process.
        Threads can be identified in the program code by hypothetical execution paths.
        The thread can only be executed by spawning a process in such a way that the specific thread in the program will be executed, e.g. by invoking specific arguments.
    }
}

\newglossaryentry{procedure}{
    name = procedure 
    , description = {%
        An addressable subgroup of instructions in a program that contains specific functionality.
    }
}

\newglossaryentry{function}{
    name = function
    , description = {%
        See Procedure.
    }
}

\newglossaryentry{job}{
    name = job 
    , description = {%
        A specific unit of work, specifying one or multiple programs to execute along with the arguments to be passed to them.
    }
}
