aikaryashala
A development environment, from scratch.
Five steps take a brand-new Windows machine to a working Linux setup with toolchains for C, Python and Java. Every step is one command you can copy. Nothing here assumes you have used a terminal before.
Start here
Work through the steps in order. Step 1 runs on Windows and installs Linux. Everything after that runs inside Linux.
-
STEP 1
Install Ubuntu
Turn on WSL and install Ubuntu 24.04 LTS alongside Windows — no dual boot, no virtual machine to configure.
wsl ubuntu-24.04 -
STEP 1.5
Finding your way around
Nothing to install. Move around the filesystem and make, read, copy and delete files — what every later step assumes.
cd ls mkdir cp mv rm cat -
STEP 2
Core commands
The small set you cannot work without: fetching a file, reaching another machine, editing text, looking around.
git curl ssh vim nano less file jq tree htop -
STEP 3
C: clang and lldb
Compile C with clang, then stop the running program under lldb and look at what it is actually doing.
clang lldb lld -
STEP 4
Python 3
No compiler, nothing to build. Write a file and run it — the same sum program as step 3, in one command.
python3 -
STEP 5
Java: javac and jshell
A current Temurin JDK. Compile and run source files, or try an idea in jshell with no file at all.
java javac jshell -
STEP 5.5
Check everything, and report
Tests every tool from steps 2 to 5 by actually using it, then reports your progress to your teacher.
verify report
Want to know why?
The book: understanding behind the scenes, what is happening internally and how the whole systems and programs work.
The steps tell you what to type. The book explains what is happening
underneath, in plain English — what a shell is, what a compiler does, why
./hello needs those two characters. Read it alongside the
steps, or come to it when a word puzzles you.
Optional extras
These seven stand on their own. Nothing in steps 1 to 5 needs them, and they are not part of the install-everything command below. Add them whenever you want what they contain.
-
STEP 6
The wider toolkit
Fast search, a terminal that survives disconnection, and the remaining network and archive tools.
rg fd fzf bat tmux wget rsync ncdu -
STEP 7
Reading binaries
Take a compiled program apart: read it as hex, disassemble it, check it for memory errors, watch its system calls.
xxd hexyl objdump readelf nm valgrind strace make -
STEP 8
Python packages with uv
One fast tool for libraries, projects and Python versions. Replaces pip, venv, pyenv, pipx and poetry.
uv uvx ruff -
STEP 9
Java build tools
Maven and Gradle, for Java projects that need a third-party library, a test framework, or more than a few files.
mvn gradle gradlew -
STEP 10
Doing more with jq
Practice, not an install. Pull information out of JSON: read fields, filter lists, count, add up and reshape.
jq practice -
STEP 11
Compiler options that find bugs
Make clang hunt for your mistakes: warnings, and a sanitizer that names the exact line a memory bug happened on.
-Wall -Wextra -fsanitize=address -
STEP 12
Debugging Python with pdb
Stop a program in the middle, read its variables, and walk it forward one line at a time. Nothing to install.
pdb breakpoint trace
Or install everything at once
Once step 1 is done and you have an Ubuntu terminal open, this single command runs steps 2 through 5 back to back. It takes a few minutes.
$ curl -fsSL https://aikaryashala.com/system_setup/scripts/install_all.sh | bash
That is everything most people need. The extras below are optional — skip this second command entirely unless you want what steps 6 to 12 contain, and you can always come back and run it later.
$ curl -fsSL https://aikaryashala.com/system_setup/scripts/install_all.sh | STEPS="more_cmds binary uv maven_gradle sanitizers py_debug" bash
Piping a script from the internet into your shell runs whatever that script contains. That is worth being careful about — including here. Every script on this site is plain text you can read first: open it in your browser, or read it on GitHub.
What you end up with
| Area | Tools | Why these |
|---|---|---|
| Operating system | Ubuntu 24.04 on WSL 2 |
Real Linux, running next to Windows, sharing your files. |
| C (step 3) | clang, lldb |
Clang explains its errors better than any other C compiler, and LLDB is its matching debugger. |
| Binary inspection (step 7) | xxd, hexyl, hexdump, od, objdump, readelf |
Seeing a program as bytes is how you learn what compiling actually produced. |
| Python (step 4) | python3 |
The interpreter. Enough to write a program and run it. The debugger is step 12. |
| Python packages (step 8) | uv |
Replaces pip, venv, pyenv, pipx and poetry with one tool that is also far faster. |
| Java (step 5) | Temurin JDK, javac, java, jshell |
The mainstream OpenJDK build, kept current. Maven and Gradle are step 9. |
What you need
- Windows 10 version 2004 or newer, or Windows 11 (build 19041+).
- An administrator account on that machine, for step 1 only.
- Around 10 GB of free disk space and a reasonable internet connection.
Already on Linux or a Mac with Ubuntu in a container? Skip step 1 — steps 2 to 5 are ordinary Ubuntu package installs and work anywhere APT does.
How to read the pages
Code blocks on this site look like this:
$ clang --version
Ubuntu clang version 18.1.3
- The
$is the prompt your terminal already shows. Do not type it. - Grey lines are what the computer prints back, not something to type.
- The Copy button strips both, so pasting always gives you just the command.