Apple unveiled macOS Catalina yesterday with support for iPad apps and lots of new features, but a big change for developers and power users was missing from the on stage presentation. Starting with macOS Catalina, Macs will now use zsh as the default login shell and interactive shell across the operating system. All newly created user accounts in macOS Catalina will use zsh by default. Bash will still be available, but Apple is signaling that developers should start moving to zsh on macOS Mojave or earlier in anticipation of bash eventually going away in macOS.
Apple hasn’t explained exactly why it’s making this change, but bash isn’t exactly a modern shell as it’s implemented in macOS, and a switch to something less aging makes a lot more sense for the company. Apple is stuck using version 3.2 of bash that has been licensed under GPLv2, as newer versions are licensed under GPLv3. Apple has kept clear of using GPLv3 packages in macOS as the license is generally more restrictive to companies like Apple that sign their own code and it includes explicit patent grants, too.
While a number of Mac developers have already moved on to even more modern shells like Fish, zsh is more compatible with Bourne shell (sh) and mostly compatible with bash. There’s a lot more flexible autocomplete with zsh, and if you’re interested in moving to zsh on macOS Mojave then there are plenty of helpful guides for getting the best terminal setup and getting used to zsh before bash is fully phased out.