Software Fundamentals
Software Fundamentals asks you to explain how software is written, packaged, and executed. Licensing, business models, and collaboration all rest on these mechanics, so the questions here are definitional but precise.
Source code, binaries, and execution
- Source code is the human-readable form, and it is what open source licenses grant rights to; the OSI definition calls it the "preferred form for making modifications".
- Compiled languages (C, Go, Rust) produce architecture-specific binaries via a compiler and linker. Interpreted languages (Python, shell) are executed by an interpreter at runtime. Java compiles to bytecode run by a JVM.
- Libraries supply reusable code behind an API; a dependency is another package a program needs in order to build or run.
Systems and packaging
- An operating system combines a kernel with userland (libraries, shell, utilities), often plus a desktop environment. Linux is a kernel; Debian, Fedora, and Ubuntu are distributions that add a package manager and repositories.
- Package managers (dpkg/apt, rpm/dnf, pacman, pip, npm) resolve dependencies, enforce version constraints, and verify signatures. Installing from source bypasses that curation.
- Virtual machines run a complete guest OS on a hypervisor; containers share the host kernel and isolate processes using namespaces and cgroups, so an image ships the app plus userland but never a kernel.
Worked example
apt refuses an install: myapp : Depends: libfoo (>= 2.0) but 1.8 is to be installed. The reasoning: the dependency is declared in package metadata, the resolver only consults configured repositories, and the installed libfoo is too old. Correct responses are to enable a repository carrying libfoo 2.0, upgrade the distribution release, or install a myapp build that accepts 1.8 - not to copy a random libfoo.so into /usr/lib.
Traps
- Saying "Linux" when the question asks about the kernel, or the reverse.
- Treating freeware (zero price) as open source (rights to use, modify, redistribute).
- Assuming published source alone qualifies as open source.
- Forgetting that containers do not bundle a kernel.