ping·aiCSTU · CSE 642 · Foundations · Installing software
Part A · How software reaches you

Why start here

Every tool in this course has to be installed first.

Git, Docker, Node.js, Python and the GitHub CLI all arrive on your computer the same way: someone packages the program, you download it, and something installs it. If you know the few ways that happens, setup stops feeling like guesswork, and you can ask a Coding Agent App for the right one.

This deck uses a few terminal commands as examples. The next deck, The terminal, explains the window you type them in.

Slide 1 of 17

Read this deck as an article

The same content as the slides above, in one page.

Why start here

Every tool in this course has to be installed first.

Git, Docker, Node.js, Python and the GitHub CLI all arrive on your computer the same way: someone packages the program, you download it, and something installs it. If you know the few ways that happens, setup stops feeling like guesswork, and you can ask a Coding Agent App for the right one.

This deck uses a few terminal commands as examples. The next deck, The terminal, explains the window you type them in.

Two places you type

A terminal takes exact commands. A Coding Agent App takes plain-language prompts.

The Terminal

A text window where you type exact commands. The shell inside it runs each command the moment you press Enter.

  • Spelling and spacing must be exact.
  • macOS and Linux use zsh or bash. Upper and lower case matter there: Git is not git.
  • Windows uses PowerShell. It does not care about case in command names, but type them as shown anyway.
  • Names inside a command, such as Linux file paths, branch names and image names, can be case-sensitive in any shell.
  • The two kinds of shell have different commands: ls -la works in zsh and bash, while PowerShell uses Get-ChildItem -Force.

Terminal command, macOS and Linux (zsh or bash, case-sensitive): ls -la

Terminal command, Windows PowerShell (command names are not case-sensitive): Get-ChildItem -Force

A Coding Agent App

It looks like a chatbot, but it does much more: it can read your project files, run commands, edit code and use tools, and it often asks your permission first. Product names and features change fast and differ a lot, so these decks use one group name for all of them.

Examples: Kiro, Claude Code Desktop, GitHub Copilot's desktop app, Google Antigravity, the Codex and ChatGPT desktop apps, OpenCode, Hermes, LangChain's Deep Agents desktop app, and others. Which one you use does not matter here.

  • Plain language is fine. Say what you want, and use the right names for things.
  • Capital letters and small slips are forgiving; the meaning is what counts.
  • It may run terminal commands for you. Read what it proposes, especially anything that deletes files or sends data.
  • Pasting a command into the prompt does not guarantee it runs as typed. Ask for the result you want, or ask the app to explain the command first.
Prompt for a Coding Agent App: “What changed in my project since the last commit? Explain it in plain words.”

The same job, two ways

Terminal command, Any shell: git status

In a terminal you type the exact command. In a Coding Agent App you describe what you want.

Three ways software reaches your computer

Same program, different route. Each route has trade-offs.

1 · Download an installer
You fetch a file and run it A .dmg or .pkg on a Mac, an .exe or .msi on Windows. Simple for one app. You must find the right file, and you must come back and update it yourself.
2 · An app store
A curated shop on your computer The Mac App Store and the Microsoft Store. Checked by the platform and easy to update, but they carry few developer tools.
3 · A package manager
A catalog you control by typing brew install git or winget install finds, installs, updates and removes software. It is repeatable, so it can be written in a setup script.

Developers prefer the third route. A setup you can repeat is a setup you can fix, share and automate.

The words, part 1

Each card gives the word, what it means, and a sentence you can say to a Coding Agent App.

Installer
One file that installs one program. You run it, click through, and the program is on your computer.
Prompt for a Coding Agent App: “Is there an official installer for this tool, and which file do I pick for my computer?”
Package
A program or library bundled with its name, version and a list of what it needs.
Prompt for a Coding Agent App: “What is the package name for this tool on my system?”
Package manager
A program that finds, installs, updates and removes packages from one command.
Prompt for a Coding Agent App: “Which package manager should I use to install this on my computer?”
Library
Code someone else wrote that your program reuses, so you do not write it again.
Prompt for a Coding Agent App: “Which libraries does this project use, and what is each one for?”

The words, part 2

Dependency
A library your project needs in order to run. Libraries can need other libraries, so the list grows.
Prompt for a Coding Agent App: “List this project's dependencies and tell me which ones I can ignore.”
Registry
An online catalog of packages, such as npm for JavaScript or PyPI for Python. The tool downloads from it.
Prompt for a Coding Agent App: “Where does this package come from, and is it the official one?”
Version
A number such as 22.1.0 that names one release. Newer is not always safer for your project.
Prompt for a Coding Agent App: “Which version of Node does this project need, and how do I install exactly that one?”
Runtime
The program that runs code written in a language, such as Node.js for JavaScript or the Python interpreter.
Prompt for a Coding Agent App: “Which runtime and version do I need to run this project?”

Programs and libraries are different jobs. A package manager like Homebrew installs programs on your computer. A language tool like npm installs libraries into one project.

Homebrew: the package manager for Mac

Started in 2009. It is the usual way developers install tools on macOS, and it also runs on Linux.

Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew --version

Check that Homebrew is installed To install it, copy the one-line command from brew.sh, the official site, and paste it in your terminal.

Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew search node

Look for a package Lists the formulae and casks whose names match.

Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew install git gh

Install one or more tools Downloads each tool and everything it needs. One command, several tools.

Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew list

See what you installed Brew keeps the list, so you do not have to remember.

Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew upgrade

Update everything it installed Run brew update first to refresh the catalog.

Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew uninstall gh

Remove a tool Clean and complete. A hand-dragged app can leave files behind.

zsh and bash are case-sensitive: brew works, Brew does not.

Homebrew details that surprise beginners

Formula or cask
Command-line tools versus Mac apps A formula is a command-line tool, such as git. A cask is a regular Mac app, installed with brew install --cask.
Prebuilt or built here
Most packages arrive ready to run Brew downloads a prebuilt binary when it has one for your Mac. Otherwise it builds the program from source, which is slower and needs a compiler.
Xcode Command Line Tools
Apple's free compiler kit Homebrew asks for it the first time. Say yes. It also supplies git and the compiler (clang) that the next slides explain.
Apple silicon or Intel
Two kinds of Mac processor Homebrew lives in /opt/homebrew on Apple silicon and /usr/local on Intel. The installer chooses; the terminal may ask you to add it to your PATH, so follow the printed instructions.

Each programming language has its own tool

Homebrew installs programs. These install the libraries a single project uses.

JavaScript and TypeScript
npm Ships with Node.js. Libraries come from the npm registry. Alternatives: yarn, pnpm and bun. Older: bower.
Python
uv A fast manager released in 2024. It installs Python, project libraries and the project's own environment. Before it: pip, venv, pipenv, poetry and conda.
Java
Maven and Gradle Libraries come from Maven Central. Gradle is newer and more flexible. Older: Ant.
Rust
cargo Builds the program and fetches libraries from crates.io. One tool does both jobs.
Go
go modules Built into the go command. Libraries are named by their web address.
Ruby, PHP, .NET
gem · Composer · NuGet Same idea: a command, a registry and a file listing what the project needs.

The pattern repeats: a registry of libraries, a command that installs them, and a file in your project that lists them.

Reading a project's dependency files

You do not write these by hand. You should know which one you are looking at.

package.json
JavaScript: the list of libraries and scripts npm install reads it and creates node_modules, a large folder you never edit.
package-lock.json
JavaScript: the exact versions that were installed The lock file makes every computer install the same versions.
pyproject.toml and uv.lock
Python: the list, and the exact versions uv sync reads them and creates a private environment for the project. requirements.txt is the older, simpler list.
Docker also does this job
A container carries its own tools In this course the whole project runs in Docker, so you rarely install these libraries on your own computer.

What a compiler does

Computers run machine code, which is just numbers. People write something readable.

1 · Source code
Text a person can read Written in C, C++, Rust, Go or Swift. It says what the program should do.
2 · The compiler
A translator program It checks the code for mistakes, then converts it to instructions for one kind of processor. On a Mac the common compiler is clang.
3 · Machine code
A binary file Bytes the processor understands directly. This is what an .exe or a Mac program really is. You cannot read it, but you can run it.

A binary is the finished program. The source code is the recipe. When you download an app, you almost always get the binary.

One program, several binaries

Machine code fits one processor and one operating system. That is why downloads offer choices.

Mac
Apple silicon (arm64) or Intel (x86-64) Newer Macs use Apple's own chips. A program built for the other kind needs Rosetta, Apple's translator, and may be slower.
Windows
x64 or ARM64 Most PCs are x64. Some laptops use ARM and run x64 programs through Windows's built-in emulation, usually a little slower.
The file format also differs
Mac, Windows and Linux are not interchangeable Each system expects its own program format. A Windows .exe does not run on a Mac, and the reverse.
Not every language compiles ahead of time
Python and JavaScript run through a runtime Their code is read by an interpreter such as python or node as it runs. That is why you install the runtime first. Java compiles to a middle form that a Java runtime then runs.

Practical rule: when a download page lists several files, pick the one that matches your operating system and your processor. A package manager chooses for you.

Windows: how installing evolved

Each step added what the last one lacked.

1990s and on · .exe installers
Download, double-click, click Next Every maker wrote their own setup program. Uninstalling was inconsistent, and updates were your job.
Around 2000 · MSI
Windows Installer packages A standard format that Windows itself tracks. IT departments can install and remove it silently across many PCs.
2011 · Chocolatey
The first popular command-line manager Community-run. choco install git brought the Linux idea to Windows. It usually asks for administrator rights.
Early 2010s · Scoop
Installs for you alone Aimed at developers. It needs no administrator rights and keeps each tool in your own folder.
2012 onward · Microsoft Store, later MSIX
Packages checked and updated by Microsoft Safe and tidy, but the Store never held most developer tools.
2020 and 2021 · winget
Microsoft's own package manager Announced in 2020, version 1.0 in 2021. Included with current Windows 10 and 11. Its catalog is a public list on GitHub.

Mac and Windows: the same job, side by side

Run the left line in zsh or bash, the right line in PowerShell.

Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew install gh

Terminal command, Windows PowerShell (command names are not case-sensitive): winget install --id GitHub.cli -e

Install the GitHub CLI In winget, --id names the exact package and -e means an exact match, so you do not get a lookalike.

Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew search node

Terminal command, Windows PowerShell (command names are not case-sensitive): winget search node

Search the catalog Check the publisher in the results before you install.

Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew list

Terminal command, Windows PowerShell (command names are not case-sensitive): winget list

See what is installed winget list also shows apps you installed by other routes.

Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew upgrade

Terminal command, Windows PowerShell (command names are not case-sensitive): winget upgrade --all

Update everything A good habit once a week. winget upgrade alone lists what can be updated.

Terminal command, macOS and Linux (zsh or bash, case-sensitive): brew uninstall gh

Terminal command, Windows PowerShell (command names are not case-sensitive): winget uninstall --id GitHub.cli

Remove a tool Prefer this over deleting files by hand.

Terminal command, Windows PowerShell (command names are not case-sensitive): choco install git

Terminal command, Windows PowerShell (command names are not case-sensitive): scoop install git

The older Windows managers Chocolatey and Scoop do the same job with their own catalogs. Use one manager at a time per tool.

PowerShell command names are not case-sensitive, but copy package names and IDs exactly as shown.

What to take away from the trend

  • The trend runs in one direction: from “download a file and click through” to “name the package and let a tool install it”. Both big platforms now have a built-in or standard answer: Homebrew on Mac, winget on Windows.
  • Choose one package manager per computer and use it for programs. Mixing three of them makes it hard to know who installed what.
  • Use the language tool, not the system manager, for a project's libraries: npm, uv and the like. They keep each project's libraries separate.
  • Better still, put the whole project in a container. Docker Desktop, covered in a later deck, carries the right tools with the project, so your computer stays clean.
  • A command you can repeat is better than a series of clicks you cannot. It can be shared, checked and run again by a Coding Agent App.

Rule of thumb for this course: Homebrew or winget for programs, Docker for projects.

Install with care

Installing means running someone else's code on your computer.

Check the source
Use the official site Search results and ads can lead to lookalike pages. For Homebrew, copy the command from brew.sh. For winget, check the publisher name.
Read before you paste
Be careful with one-line scripts Some sites tell you to paste a command that downloads and runs a script. Only do that for sites you chose to trust, such as the official one.
Ask before administrator rights
Know why it needs them Installers may request a password or an administrator prompt. If you cannot say why, ask your Coding Agent App before you approve.

A Coding Agent App can run install commands for you, usually after asking permission. Read the command it shows you before you approve.

Say it to your Coding Agent App

Name your computer and the tool. You get a better answer.

Prompt for a Coding Agent App: “I have a Mac with an Apple silicon chip. How do I install Git, the GitHub CLI and Node 22 with Homebrew?”
Prompt for a Coding Agent App: “I have Windows 11. Which winget commands install Git, the GitHub CLI and Docker Desktop, and how do I check they worked?”
Prompt for a Coding Agent App: “This command says command not found: <paste the exact error>. Is the tool installed, or is it just not on my PATH?”
Prompt for a Coding Agent App: “Which of these tools did I install with a package manager, and which by hand? Show me how to tell.”
Prompt for a Coding Agent App: “Explain this install error in plain language and give me the smallest fix: <paste the exact error>.”
  • Say your operating system and processor. The right answer depends on them.
  • Never paste keys or passwords into a prompt.

Learn more from the source

Checked against the official documentation on 7 November 2026.

  • The Homebrew documentation explains installing, formulae, casks and upgrades.
  • Microsoft's winget documentation lists every winget command.
  • The uv documentation shows how to install Python and manage a project's libraries.
  • The npm documentation covers installing and updating a project's JavaScript libraries.