Materials by Başar Subaşı

Başar Subaşı has published 8 tutorials and 7 challenges, and prepared 2 playgrounds.

Featured

Tutorial on Programming

Writing a (valid) C program without main()

Walk through the C compilation pipeline: preprocessor, compiler, assembler, and linker. Start with a normal hello world, inspect macros and generated assembly, and end by producing a running binary that has no main() function.

#c#gcc#assembly
Tutorial on Programming

Bare-metal programming: Write your first Assembly program

Explore what a computer, CPU architecture, and kernel are, learn the history and family of Assembly ISAs, compare CISC vs RISC, and write your first x86_64 assembly "Hello, World!" program.

#assembly#x86-64#kernel
Tutorial on Linux

Linux Processes: Threads & Concurrency

Explore what a thread actually is in Linux, how threads relate to processes, how the Linux kernel treats both as tasks (task_struct), and how kernel scheduling enables concurrency.

#threads#concurrency#scheduling
Tutorial on Linux

Linux Processes: Understanding Signals

Explore Linux/Unix signals in Go, how signals act as asynchronous notifications, who can send them, default kernel behaviors, sending signals with kill and Go, graceful signal handling with os/signal, and why SIGKILL cannot be trapped.

#golang#signals#ipc
Challenge on Programming

Utilize POSIX Threads for Concurrency

Refactor a slow, single-threaded C file downloader that fetches files sequentially into a multi-threaded program using POSIX Threads (pthreads) to achieve concurrent downloads.

#c#pthreads#threadsEasy
Playground on Linux

Ubuntu eBPF

Experimental playground with out of the box eBPF support through BTF

All materials

Tutorial

Change Your Root: Chroot Basics

Understand how the chroot system call changes the root directory for a process, learn how dynamic linkers resolve dependencies inside a jail, and see what an isolated process perceives as its filesystem root.

Change Your Root: Chroot Basics (cover image)
Tutorial

Using Go for Systems Programming

Discover how Go functions under the hood as a modern systems programming language. Learn how Go makes system calls directly, resulting in self-contained binaries that have no libc dependencies.

Using Go for Systems Programming (cover image)
Tutorial

Linux Processes: Understanding Signals

Explore Linux/Unix signals in Go, how signals act as asynchronous notifications, who can send them, default kernel behaviors, sending signals with kill and Go, graceful signal handling with os/signal, and why SIGKILL cannot be trapped.

Linux Processes: Understanding Signals (cover image)
See all tutorials by Başar Subaşı →
Challenge

Utilize POSIX Threads for Concurrency

Refactor a slow, single-threaded C file downloader that fetches files sequentially into a multi-threaded program using POSIX Threads (pthreads) to achieve concurrent downloads.

See all challenges by Başar Subaşı →
Playground on  Kubernetes, IaC, CI/CD

GitOps Bootstrap

A sandbox where you can experiment with different k8s stacks all you want!

Playground on  Linux, Networking, Observability

Ubuntu eBPF

Experimental playground with out of the box eBPF support through BTF

See all playgrounds by Başar Subaşı →