% // 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{rnd::rust}.
    },
    first = {\glsentrylong{Rust}}
}

\newglossaryentry{rustc}{
    name = rustc,
    long = {The Rust compiler},
    description = {%
        This program is a compiler for the Rust language (man rustc).
    },
    first = {\glsentrylong{rustc}},
}

\newglossaryentry{cargo} {
    name = {cargo},
    long = {The Rust package manager},
    description = {%
        This program is a package manager for the Rust language (man cargo).
        It is also a wrapper for the Rust compiler.
        It is also a management tool for Rust source code projects, and simplifies the initialization of project directories, the build of the source code and the run of the compiled binary.
    },
    first = {\glsentrylong{Rust}}
}

\newglossaryentry{xargo} {
    name = {xcargo},
    long = {The Cross-Compilation wrapper for cargo},
    description = {%
        Wrapper for cargo to simplify cross-compilation.
    },
    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{GCC}{
    name = GCC,
    long = {GNU Compiler Collection},
    description = {%
        GCC is an integrated distribution of compilers for several major programming languages.
        These languages currently include C, C++, Objective-C, Objective-C++, Java, Fortran, Ada, and Go.
    },
    first = {\glsentrylong{GCC}}
}

\newglossaryentry{llvm}{
    name = LLVM,
    long = {Low Level Virtual Machine},
    description = {%
        A Virtual Instruction Set and Compilation Framework.
        The key idea in LLVM is to use a rich virtual instruction set (instead of raw machine code) as the object code representation manipulated by link-time and post-link optimizers and code generators.\cite{Kowshik2002}.
    },
    first = {\glsentrylong{clang}}
}


\newglossaryentry{clang}{
    name = Clang,
    long = {C Language frontendend for LLVM},
    description = {%
        The goal of the Clang project is to create a new C based language front-end: C, C++, Objective C/C++, OpenCL C and others for the LLVM compiler. You can get and build the source today.
        \url{http://clang.llvm.org/}
    },
    first = {\glsentrylong{clang}}
}

\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{microkernel}{
    name = microkernel,
    description = {%
        Kernel design that operates most drivers in userland, and only provides bare minimum functionality in kernel mode for glueing the drivers together.
    },
}

\newglossaryentry{android}{
    name = Android,
    description = {an open-source 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 = {
        The NVD is the U.S. government repository of standards based vulnerability management data represented using the Security Content Automation Protocol (SCAP). This data enables automation of vulnerability management, security measurement, and compliance. The NVD includes databases of security checklist references, security related software flaws, misconfigurations, product names, and impact metrics.\cite{NVD}
    },
    long = {\citetitle{NVD}},
    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 = {\glsentrytext{CWE-119}\cite{MITRE-CWE-119}}
}

\newglossaryentry{CWE-635}{
    name = CWE-635,
    long = {\glsentrydesc{CWE-635}},
    description = {\citetitle{MITRE-CWE-635}},
    first = {\glsentrytext{CWE-635}\cite{MITRE-CWE-635}}
}

\newglossaryentry{CWE-122}{
    name = CWE-122,
    long = {\glsentrydesc{CWE-122}},
    description = {\citetitle{MITRE-CWE-122}},
    first = {\glsentrytext{CWE-122}\cite{MITRE-CWE-122}}
}

\newglossaryentry{CWE-134}{
    name = CWE-134,
    long = {\glsentrydesc{CWE-134}},
    description = {\citetitle{MITRE-CWE-134}},
    first = {\glsentrytext{CWE-134}\cite{MITRE-CWE-134}}
}

\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 = {%
        Physical part of the \gls{cpu} equipped for managing the system's memory.
    },
    first = {\glsentrylong{MMU}},
}

\newglossaryentry{vaddr}{
    name = virtual address,
    plural = virtual addresses,
    description = {%
        Memory Addresses that does not reference physical memory directly, but is part of a memory virtualization scheme.
    },
}

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

\newglossaryentry{realtime}{
    name = realtime
    , description = {%
        In computer science realtime refers to guaranateed execution within specified time boundaries.
    }
}

\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 study, 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.
    }
}
