Configuration Without Text Files
In Linux, the philosophy is "everything is a file." Want to change how SSH behaves? Edit /etc/ssh/sshd_config. Want to configure the network? Edit /etc/network/interfaces. Configuration is human-readable text, version-controllable with Git, and editable with any text editor.
Windows takes a fundamentally different approach. Almost all operating system and application configuration lives in The Registry — a hierarchical, binary database built into the OS. You cannot open it in a text editor. You interact with it through the regedit GUI tool or programmatically via PowerShell or the Win32 API.
Registry Structure
The Registry is organized into Hives (root namespaces), each serving a specific purpose:
| Hive | Abbreviation | Purpose |
|---|---|---|
HKEY_LOCAL_MACHINE |
HKLM |
Machine-wide settings (hardware, OS, installed software) |
HKEY_CURRENT_USER |
HKCU |
Settings for the currently logged-in user |
HKEY_CLASSES_ROOT |
HKCR |
File type associations and COM object registrations |
HKEY_USERS |
HKU |
Settings for all user profiles on the machine |
HKEY_CURRENT_CONFIG |
HKCC |
Current hardware profile |
Within each hive, you navigate a tree of Keys (folders) and Values (the actual settings). Values have types: REG_SZ (string), REG_DWORD (32-bit integer), REG_BINARY (raw binary), REG_MULTI_SZ (multi-line string), and others.
A Concrete Example: Enabling Remote Desktop
On Linux, enabling SSH is: systemctl enable ssh && systemctl start ssh.
On Windows, enabling Remote Desktop means setting the registry value fDenyTSConnections under HKLM:\System\CurrentControlSet\Control\Terminal Server to 0, then opening the corresponding firewall rule group. The key's naming is counterintuitive: a value of 1 means "deny connections" (RDP disabled), and 0 means "allow connections" (RDP enabled) — flipped from what most people would guess, and a common source of bugs.
The DevOps Implication
You cannot grep or sed the registry. You cannot diff it easily. You cannot put it in Git without tooling. This is why Windows automation requires PowerShell or tools like Ansible's win_regedit module. When writing Windows automation, always read the current value before writing, and always test registry changes in a non-production environment first — a corrupt registry can make a machine unbootable.
For infrastructure-as-code on Windows, Desired State Configuration (DSC) provides a declarative way to manage registry keys, services, files, and other resources, similar to how Ansible manages Linux systems.