๐Ÿ“ฆ Alin Li ยท Open Source Artifacts

Every Type of Open Source Artifact

Library, framework, package, binary, container image, source code, firmware โ€” open source comes in many forms. Each type is different, used differently, and verified differently. This guide explains them ALL โ€” including how SHA checksums protect you from tampered files.

All Types ๐Ÿ“ฆWhat is SHA? ๐Ÿ”
๐Ÿง  BIG PICTURE

What is an "Artifact" in Open Source?

๐Ÿ“ฆ An Artifact = Anything Produced by a Software Project

In software, an "artifact" is any file or package that a project creates and distributes. When a developer writes code and shares it, the things they publish โ€” the compiled program, the library file, the Docker image, the source code archive โ€” are all artifacts.

Different artifacts serve different purposes, are installed differently, and need to be verified differently. Understanding the types is essential because: you wouldn't install a library the same way you install an operating system, and you wouldn't verify a container image the same way you verify source code.

๐Ÿณ

Kitchen Analogy: Think of a restaurant kitchen. The recipe (source code) tells you HOW to cook. The ingredients (libraries/dependencies) are the raw materials. The prepared meal (binary/package) is the ready-to-eat result. The meal kit (container image) is everything pre-measured in a box โ€” just heat and serve. The cookbook (documentation) explains all the recipes. Different artifacts, different uses.

๐Ÿ“ฆ ALL TYPES

Every Type of Open Source Artifact

๐Ÿ“œ

Source Code Foundation of Everything

The raw human-readable instructions โ€” the recipe itself

Source code is the original text written by developers in a programming language (Python, C, Java, JavaScript, etc.). It's what you see on GitHub. It's human-readable โ€” you can open it in a text editor and understand what it does. ALL other artifacts are created FROM source code.

How you get it: Clone a Git repository, download a .tar.gz or .zip archive from GitHub/GitLab, or extract it from a source package.

๐Ÿณ

Analogy: The recipe written on paper. You can read it, modify it, and cook from it โ€” but you need a kitchen (compiler/interpreter) to turn it into a meal.

Getting source code
# Clone from Git (most common) $ git clone https://github.com/nextcloud/server.git # Download as archive $ wget https://github.com/project/repo/archive/v2.0.tar.gz $ tar -xzf v2.0.tar.gz # Source code needs to be COMPILED or INTERPRETED to run # C/C++/Rust โ†’ compile first โ†’ then run the binary # Python/JS/PHP โ†’ run directly (interpreted)
Linux kernel sourcePython scriptsAny GitHub repo.tar.gz / .zip archives
๐Ÿ” Security

Source code is the MOST transparent artifact โ€” you can read every line and verify there's nothing malicious. This is why open source is more trustworthy: anyone can audit the source code. Always prefer reviewing source when security is critical.

๐Ÿ“š

Library (lib) Reusable Building Block

Pre-written code that YOUR program calls โ€” you don't run it alone

A library is a collection of pre-written functions that developers use inside their own programs. You don't run a library directly โ€” you import it into your code and call its functions. Libraries save developers from reinventing the wheel.

For example, instead of writing your own code to parse JSON, you use a JSON library. Instead of writing your own encryption, you use OpenSSL (a library). Libraries are the LEGO bricks of software.

๐Ÿงฑ

Analogy: LEGO bricks. You don't play with a single brick โ€” you combine many bricks to build something. Each library is a specialized brick (one for colors, one for shapes, one for sounds).

Using libraries
# Python: import a library import requests # HTTP library import numpy as np # Math library import pandas as pd # Data analysis library # JavaScript: import a library import React from 'react'; # UI library import axios from 'axios'; # HTTP library # C: link a library at compile time $ gcc myprogram.c -lssl -lcrypto # Link OpenSSL library
OpenSSL (encryption)React (UI)NumPy (math)FFmpeg (video)SQLite (database)zlib (compression)
๐Ÿ“ File Types

Linux: .so (shared object), .a (static archive) โ€” e.g., libssl.so
Windows: .dll (dynamic link library) โ€” e.g., openssl.dll
macOS: .dylib (dynamic library)
Python: .py files or compiled .whl (wheel)
Java: .jar (Java archive)

๐Ÿ—๏ธ

Framework Skeleton + Rules

A library that controls the flow โ€” YOU fill in the blanks

A framework is like a library, but with a key difference: a library is called BY your code; a framework CALLS your code. The framework provides the structure (routing, database, authentication) and you fill in the specific parts (your business logic, your pages, your data).

๐Ÿ 

Analogy: A house frame (walls, roof, plumbing already built). You don't build the foundation โ€” you fill in the furniture, paint, and decorations. The framework decides WHERE the doors go; you decide what color they are.

Django (Python web)React (UI)Spring (Java)Laravel (PHP)Express.js (Node)Flutter (mobile)Next.js (React)
๐Ÿค” Library vs Framework โ€” The Hollywood Principle

Library: "You call us." Your code decides when to use the library. Framework: "Don't call us, we'll call you." The framework runs the show and calls YOUR code at the right moments. This is called the "Inversion of Control" โ€” the framework is in charge, not you.

๐Ÿ“ฆ

Package Ready to Install

Source code + metadata + dependencies bundled for easy installation

A package is a bundled, installable unit โ€” it contains the code (source or compiled), metadata (name, version, author, license), and a list of dependencies (other packages it needs). Package managers install, update, and remove packages automatically.

๐Ÿ“ฌ

Analogy: A mail-order package โ€” labeled with sender, contents list, and delivery instructions. The package manager is the postal service that delivers and installs it for you.

Installing packages with different managers
# Linux system packages (.deb / .rpm) $ sudo apt install nginx # Debian/Ubuntu (.deb) $ sudo dnf install nginx # Fedora/RHEL (.rpm) # Python packages (.whl from PyPI) $ pip install flask # From pypi.org # JavaScript packages (from npm) $ npm install express # From npmjs.com # Rust packages (crates) $ cargo install ripgrep # From crates.io # Universal Linux packages $ snap install nextcloud # Snap package $ flatpak install org.gimp.GIMP # Flatpak package
๐Ÿ“ Package Formats

.deb โ€” Debian/Ubuntu/Mint (installed by apt/dpkg)
.rpm โ€” Fedora/RHEL/SUSE (installed by dnf/yum/zypper)
.whl โ€” Python wheel (installed by pip)
.gem โ€” Ruby (installed by gem)
.jar / .war โ€” Java (installed by Maven/Gradle)
.snap โ€” Universal Linux (installed by snap)
.flatpak โ€” Universal Linux (installed by flatpak)
.AppImage โ€” Portable Linux app (just download and run!)

โš ๏ธ Package Registries โ€” Where They Live

PyPI (pypi.org) โ€” Python ยท npm (npmjs.com) โ€” JavaScript ยท crates.io โ€” Rust ยท Maven Central โ€” Java ยท RubyGems โ€” Ruby ยท NuGet โ€” .NET ยท APT repos โ€” Debian/Ubuntu ยท Flathub โ€” Flatpak ยท Snap Store โ€” Snap. Each language has its own registry.

โšก

Binary / Executable Compiled & Ready to Run

Machine code โ€” the computer runs it directly, no compilation needed

A binary is compiled machine code โ€” the CPU runs it directly. When source code (C, C++, Rust, Go) is compiled, the result is a binary. You can't read it (it's 1s and 0s) โ€” but it's FAST because the CPU doesn't need to translate anything.

Important distinction: Binaries are platform-specific! A Linux binary won't run on Windows, and an ARM binary won't run on x86. That's why projects publish binaries for EACH platform: linux-amd64, linux-arm64, windows-x64, macos-arm64, etc.

๐Ÿฝ๏ธ

Analogy: The cooked meal โ€” ready to eat immediately. You can't see the recipe by looking at it (decompilation is hard and imperfect), and it only fits certain plates (platforms).

Working with binaries
# Compile source code โ†’ binary $ gcc -o myprogram myprogram.c # C โ†’ binary $ go build -o myapp main.go # Go โ†’ binary $ cargo build --release # Rust โ†’ binary # Download pre-compiled binary $ wget https://example.com/tool-linux-amd64 $ chmod +x tool-linux-amd64 $ ./tool-linux-amd64 # Run it! # Check what kind of binary it is $ file tool-linux-amd64 tool-linux-amd64: ELF 64-bit LSB executable, x86-64
.exe (Windows)ELF (Linux)Mach-O (macOS).apk (Android).AppImage (Linux portable)
๐Ÿšจ Security Warning

Binaries are OPAQUE โ€” you can't easily verify what's inside. A binary COULD contain malware you can't see. This is why SHA checksums and GPG signatures are critical for binaries. ALWAYS verify the hash of downloaded binaries before running them. More on this below.

๐Ÿณ

Container Image (Docker) Complete Environment

The application + ALL its dependencies + OS layer in one portable file

A container image is a complete, self-contained package that includes: the application binary, all its libraries, configuration files, and even a minimal OS layer. It runs identically on ANY machine with Docker/Podman installed โ€” no "works on my machine" problem.

๐Ÿ“ฆ

Analogy: A meal kit box โ€” contains the meal, plates, utensils, and even a mini-oven. You don't need anything except a table (Docker engine). Everything is pre-packaged to work perfectly together.

Working with container images
# Pull an image from Docker Hub $ docker pull nginx:latest $ docker pull nextcloud:28 $ docker pull postgres:16 # Run it $ docker run -d -p 8080:80 nginx # Build your own image from a Dockerfile $ docker build -t myapp:1.0 . # Images are stored in registries: # Docker Hub (hub.docker.com) # GitHub Container Registry (ghcr.io) # Quay.io (Red Hat)
Docker Hub imagesOCI imagesPodmanghcr.ioquay.io
๐Ÿ” Image Verification

Container images have digests (SHA256 hashes of each layer). Use docker pull nginx@sha256:abc123... to pull by exact digest โ€” guaranteeing you get the EXACT image, not a tampered version. Also check for Cosign signatures (modern image signing).

๐Ÿ”ง

Firmware / ROM Embedded Software

Software burned into hardware โ€” routers, Arduino, IoT devices, BIOS

Firmware is software that lives inside hardware devices โ€” your router, your Arduino, your printer, your TV, your car's computer, your BIOS/UEFI. It's usually a binary image that gets "flashed" (written) to the device's memory chip. Open-source firmware gives you control over your hardware.

OpenWrt (routers)Coreboot (BIOS)Arduino sketchesTasmota (smart plugs)LineageOS (phones)ESPHome (IoT)
๐Ÿšจ Flash Carefully!

Flashing wrong firmware can "brick" your device (make it completely non-functional). ALWAYS verify the SHA checksum of firmware files before flashing. ALWAYS follow the exact instructions for your specific hardware model.

๐Ÿ’ฟ

ISO Image / Disk Image Bootable System

Complete operating system or installation media in one file

An ISO image is a complete disk image โ€” usually a full operating system installer. You download it, write it to a USB drive (using Etcher), and boot from it to install an OS. Named after the ISO 9660 file system standard for CD-ROMs.

Linux Mint .isoZorin OS .isoUbuntu .isoProxmox .isoTails .iso (privacy OS)
๐Ÿ” ALWAYS Verify ISOs!

OS ISOs are the #1 target for supply chain attacks โ€” if an attacker modifies an ISO, they can insert a backdoor into your entire operating system. EVERY Linux distro publishes SHA256 checksums alongside their ISOs. ALWAYS verify before installing.

๐Ÿ“–

Documentation & Assets Knowledge

Manuals, guides, API docs, translations, design assets

Documentation is often overlooked but is a crucial artifact: READMEs, API references, tutorials, man pages, translation files, design files (icons, logos), and configuration examples. Good documentation is what separates usable software from abandoned experiments.

README.mdman pagesAPI docs (Swagger/OpenAPI)Wiki pagesTranslation .po filesLicense files
๐Ÿง 

AI Models & Datasets The Newest Type

Trained neural networks and training data โ€” the AI age's artifacts

A new category of artifact: AI model weights (the trained parameters of a neural network, often GBโ€“TB in size) and datasets (the data used to train them). These are distributed via Hugging Face, Ollama, and model registries.

Getting AI model artifacts
# Download model via Ollama $ ollama pull llama3.2:8b # 4.7 GB model weights # Download from Hugging Face $ pip install huggingface_hub $ huggingface-cli download meta-llama/Llama-3.2-8B # Models come as: .gguf, .safetensors, .bin, .pt files
Llama 3 (.gguf)Stable Diffusion (.safetensors)Whisper (.pt)Common Crawl (dataset)ImageNet (dataset)
๐Ÿ” SHA & VERIFICATION

What is SHA? How to Verify Downloads

The most important security skill you'll learn today.

๐Ÿ” SHA = Secure Hash Algorithm โ€” Your Digital Fingerprint Machine

SHA is a mathematical function that takes ANY file โ€” no matter how big โ€” and produces a fixed-length "fingerprint" (called a hash or checksum). This fingerprint has incredible properties:

โ€ข Unique: Even changing ONE bit in the file produces a COMPLETELY different hash
โ€ข Fixed size: Whether the file is 1 KB or 100 GB, the hash is always the same length
โ€ข One-way: You can't reverse-engineer the file from the hash
โ€ข Deterministic: The same file ALWAYS produces the same hash

๐Ÿ‘๏ธ See It in Action โ€” How One Character Changes Everything

Input: "Hello"

SHA256:

185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969

Input: "hello" (lowercase!)

SHA256:

2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

Input: "Hello!" (add !)

SHA256:

334d016f755cd6dc58c53a86e183882f8ec14f52fb05345887c8a5edd42c87b7

See? Changing ONE character produces a completely different hash. If someone modifies a single byte in a 4 GB ISO file, the entire SHA256 hash changes. This is how you detect tampering.

๐Ÿ“Š SHA Variants โ€” Which One to Use?

AlgorithmHash LengthSecurityUse Today?
MD5128 bits (32 hex chars)โŒ BROKENNO โ€” collisions found in 2004. Attackers can create two different files with the same MD5.
SHA-1160 bits (40 hex chars)โš ๏ธ WEAKAvoid โ€” Google proved a collision attack (SHAttered) in 2017. Still used by some old systems.
SHA-256256 bits (64 hex chars)โœ… STRONGโญ YES โ€” the standard. Used by Bitcoin, TLS, most Linux distros, Docker.
SHA-512512 bits (128 hex chars)โœ… VERY STRONGYes โ€” slightly stronger, used for passwords and high-security contexts.
SHA-3 (Keccak)Variableโœ… STRONGESTYes โ€” newest standard (2015), completely different algorithm from SHA-2. Used where future-proofing matters.
๐Ÿ”‘ Rule of Thumb

Use SHA-256 for everything. It's the industry standard, supported everywhere, and has no known weaknesses. Only use SHA-512 or SHA-3 if you have specific high-security requirements. NEVER use MD5 or SHA-1 for security purposes.

๐Ÿ›ก๏ธ Step-by-Step: How to Verify a Downloaded File

When you download a Linux ISO, firmware, or any important file โ€” here's how to verify it hasn't been tampered with:

Verify a download using SHA256
# Step 1: Download the file AND its checksum $ wget https://linuxmint.com/linuxmint-22-cinnamon-64bit.iso $ wget https://linuxmint.com/sha256sum.txt # Step 2: Calculate the SHA256 of YOUR downloaded file $ sha256sum linuxmint-22-cinnamon-64bit.iso a1b2c3d4e5f6... linuxmint-22-cinnamon-64bit.iso # Step 3: Compare with the official checksum $ cat sha256sum.txt a1b2c3d4e5f6... linuxmint-22-cinnamon-64bit.iso # If they MATCH โ†’ file is genuine! โœ… # If they DON'T match โ†’ file is CORRUPTED or TAMPERED! โŒ # Quick one-liner to auto-check: $ sha256sum -c sha256sum.txt linuxmint-22-cinnamon-64bit.iso: OK

๐Ÿ” GPG Signatures โ€” Beyond SHA (Chain of Trust)

SHA tells you the file hasn't changed. But what if an attacker hacked the website and replaced BOTH the file AND the checksum? Then the SHA would match a tampered file!

GPG signatures solve this: the developer digitally signs the checksum file with their private key. You verify the signature with their public key. Even if the website is hacked, the attacker can't forge the developer's signature without their private key.

Verify GPG signature
# Import the project's GPG key $ gpg --keyserver keyserver.ubuntu.com --recv-keys ABCD1234 # Verify the signature on the checksum file $ gpg --verify sha256sum.txt.gpg sha256sum.txt gpg: Good signature from "Linux Mint ISO Signing Key" # If "Good signature" โ†’ the checksum is authentic # Then verify the ISO against the checksum (as above) # This is TWO layers of verification: signature + hash
๐Ÿ” The Full Chain of Trust

Developer writes code โ†’ compiles binary โ†’ calculates SHA256 hash โ†’ signs the hash with GPG key โ†’ publishes file + hash + signature. You download all three โ†’ verify GPG signature (proves authenticity) โ†’ verify SHA256 (proves integrity). If both pass, you can trust the file.

๐Ÿ“‹ Verification Methods by Artifact Type

๐Ÿ“œ Source Code

Git commit hashes (SHA-1 โ†’ moving to SHA-256), signed tags (git tag -v), GitHub verified badges

๐Ÿ“ฆ Packages (.deb/.rpm)

Repos are GPG-signed. apt/dnf verify signatures automatically. apt-key manages trusted keys

๐Ÿ“ฆ pip/npm packages

PyPI has hash pinning (pip install pkg==1.0 --hash sha256:abc...). npm uses SHA-512 in lockfiles

โšก Binaries

SHA256 checksum files + GPG signatures. Always verify BOTH before running

๐Ÿณ Container Images

Image digests (sha256:abc...), Cosign signatures, Docker Content Trust (Notary)

๐Ÿ’ฟ ISO Images

SHA256 checksum files + GPG signatures. CRITICAL to verify โ€” the #1 supply chain target

๐Ÿ”ง Firmware

SHA256 checksums from manufacturer. Some use Secure Boot (signed firmware only)

๐Ÿง  AI Models

SHA256 on Hugging Face model cards. GGUF files have embedded checksums. Ollama verifies automatically

ยซูŠูŽุง ุฃูŽูŠูู‘ู‡ูŽุง ุงู„ูŽู‘ุฐููŠู†ูŽ ุขู…ูŽู†ููˆุง ุฅูู† ุฌูŽุงุกูŽูƒูู…ู’ ููŽุงุณูู‚ูŒ ุจูู†ูŽุจูŽุฅู ููŽุชูŽุจูŽูŠูŽู‘ู†ููˆุงยป
"O you who believe, if a wrongdoer brings you news, verify it." โ€” Quran 49:6

Tabayyanoo โ€” Verify! The Quran commands us to verify information before acting on it. SHA checksums are the digital form of this command. When you download a file from the internet, you don't blindly trust it โ€” you VERIFY its integrity. This is Tabayyanoo in the digital age.

๐Ÿ“‹ QUICK REFERENCE

Artifact Cheat Sheet

TypeWhat It IsFile TypesHow to GetVerify With
๐Ÿ“œ Source CodeHuman-readable instructions.py .js .c .rs .go .javagit clone, .tar.gzGit commit hash, signed tags
๐Ÿ“š LibraryReusable code you import.so .dll .dylib .jar .whlpip, npm, aptPackage manager signatures
๐Ÿ—๏ธ FrameworkSkeleton that calls YOUR codeSource + templatespip, npm, cargoPackage manager + lockfile hashes
๐Ÿ“ฆ PackageBundled installable unit.deb .rpm .whl .gem .snapapt, dnf, pip, npmGPG repo signatures
โšก BinaryCompiled machine codeELF, .exe, Mach-ODirect downloadSHA256 + GPG signature
๐Ÿณ Container ImageApp + dependencies + OSOCI image layersdocker pullImage digest, Cosign
๐Ÿ”ง FirmwareSoftware for hardware.bin .hex .imgManufacturer websiteSHA256 from official source
๐Ÿ’ฟ ISO ImageBootable OS installer.isoDistro websiteSHA256 + GPG (CRITICAL!)
๐Ÿ“– DocumentationGuides, API docs, translations.md .html .po .rstIn the repoGit commit history
๐Ÿง  AI ModelTrained neural network.gguf .safetensors .pt .binOllama, Hugging FaceSHA256 on model card
๐Ÿ“ฆ๐Ÿ”โœจ

Know Your Artifacts. Verify Everything.

Now you understand every type of open-source artifact โ€” from raw source code to compiled binaries, from Docker images to AI models. And you know how to VERIFY them with SHA checksums and GPG signatures. Never blindly trust a downloaded file again. Tabayyanoo โ€” verify!

๐Ÿ“œ
Read source
๐Ÿ”
Verify SHA
๐Ÿ”
Check GPG
โœ…
Trust, then run

ยซูˆูŽุฃูŽู„ูŽู†ูŽู‘ุง ู„ูŽู‡ู ุงู„ู’ุญูŽุฏููŠุฏูŽยป

Every artifact is a piece of softened iron โ€” powerful and useful. But just as a blacksmith tests the quality of iron before forging, you must verify every artifact before trusting it. โœจ