Skip to content
macOSNews July 11, 2026 3 min readViews unavailable

Apple Replaces Bash With Zsh as macOS's Default Shell

The June 2019 WWDC announcement that Catalina would ship with zsh as the default login shell, and why an old GPL licensing decision, not a technical preference, actually drove the change.

At WWDC on June 4, 2019, Apple announced that macOS Catalina, shipping that fall, would switch the default login and interactive shell from Bash to Zsh (Z shell) — a change that affected every newly created user account and represented the end of Bash’s long run as the default shell across Mac OS X and macOS.

The real reason: licensing, not technical preference

The specific driver behind this change is worth understanding because it’s less about Zsh being technically superior and more about a licensing constraint Apple had been living with for years. Apple had been shipping Bash version 3.2 — a version from 2007 — as the system default for over a decade, because that was the last release of Bash licensed under GPLv2. Every Bash release since has been licensed under GPLv3, whose terms Apple has consistently avoided incorporating into macOS due to provisions around patent grants and tivoization (restricting hardware from running modified versions of covered software) that conflict with Apple’s approach to its platforms. Zsh, licensed under the MIT License, carries none of those constraints, letting Apple ship current versions and update it freely going forward.

What this meant for existing scripts and workflows

Apple didn’t remove Bash from macOS entirely — /bin/bash remained present and usable, still at that same frozen 3.2 version, meaning existing scripts explicitly invoking Bash continued working unchanged. What changed was specifically the default — new Terminal windows, and newly created user accounts, would use Zsh as their interactive login shell going forward, while anyone with a strong preference for continuing to use Bash interactively could still explicitly set it as their personal shell.

Practical differences users actually noticed

Zsh and Bash are similar enough that much everyday interactive use transferred over with minimal friction, but users migrating noticed real differences: Zsh’s more powerful (and differently-behaved) globbing and tab-completion system, different handling of certain shell options and startup files (.zshrc versus .bash_profile/.bashrc), and — for users with heavily customized Bash configurations — the need to either translate custom prompt and alias configuration into Zsh’s syntax or explicitly switch back to Bash as their personal default shell if they didn’t want to deal with the migration at all.

Why this was a bigger deal for developers than casual users

Casual Terminal users largely didn’t notice much difference at all, since basic command execution behaves near-identically between the two shells for simple, everyday use. Developers and system administrators with substantial existing shell customization, or scripts that made assumptions specific to Bash’s particular behavior in edge cases, were the group that actually had to do real migration work — auditing scripts for Bash-specific syntax that Zsh interprets differently, and deciding on a per-script or per-account basis whether to explicitly pin Bash or adapt to Zsh.

The lasting outcome

Zsh has remained macOS’s default shell in every release since Catalina, and the broader open-source Zsh community (along with popular configuration frameworks like Oh My Zsh, which saw a meaningful adoption bump specifically from macOS users migrating following this change) benefited from a substantial expansion of its user base virtually overnight, simply as a side effect of Apple’s licensing-driven default shell change rather than any marketing push for Zsh specifically.

Sources: