Apple replaces bash with zsh as the default shell in macOS Catalina

bash on macOS Mojave
Photo by Tom Warren / The Verge

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.

Comments

*. Whistles as it sails right over my head *

Ehhh, there’s nothing wrong with signing GPLv3’d code yourself, hell every time I boot my computer there’s a signed bootloader being run that’s licensed under the GPLv3 (ie. GRUB2). And every Debian package is signed! Hell, on a daily basis I probably run into more software under a GPLv3 license that’s signed than not. They’ve chosen a very deliberately fearful legal interpretation to provide, one that obscures the nuance they actually object to since it makes them look not like the good guys.

https://www.gnu.org/licenses/gpl-faq.en.html#GiveUpKeys is a good short summary if my eye-rolling at Apple’s spin was insufficient explanation, heh.

I too can’t understand why Apple is shying away from GPLv3.

It would be cool if it would also come with Fish, which is arguably the most Apple like Shell

Probably bit too much of a jump from people who are used to bash, though.

I’m glad they care about compatibility. I just use bash 4 in iterm, and have the Mac terminal use bash 3. I can tell the difference with a PS1 of "shitty Mac bash". Anyone worth their salt is using iterm anyway. Gnu tools will still be outdated unfortunately. Shell scripts are way over used anyway.

I find Hyper to be a lot better than iTerm for my uses. I’m sure it’s probably not suited for some devs, but I haven’t run into any issues.

There’s just nothing wrong with Unix and bash commands. It’s a language and implementation, not ‘old tech’. English is in use for hundreds of years, Bash can be, too.

Yes, there are some features and it’s from a time where certain concepts made more intuitive sense.

But there’s nothing broken here, on the contrary, a bash shell, unix OS and open source tools is one of the things Apple got right. It isn’t just the ipod/iphone/ipad that built their current success. This is one thing that doesn’t need changing. I’ve been on Unix/Linux for more than a decade and never touched zsh. They should stand pat.

It’s kind of difficult to take your perspective seriously when you so adamantly support bash and conclude with: "I’ve been on Unix/Linux for more than a decade and never touched zsh". This same logic can be applied to anything so long as you refuse to try anything else, ever.

You won’t even know the difference. ZSH and Bash are both Bourne shells, and ZSH can be setup to be pretty much completely compatible

fish has some compatibility issues with bash scripts, from what I understand. It’s a bit perplexing why it’s given such prominence in the main article to be honest.

zsh has some incompatibilities as well, at least in the scripting realm. Wonder when they are going to remove the actual bash executable.

"Apple that sign their own code and it includes explicit patent grants" probably its going to be a modified version of zsh that will offer compatibility with bash codes.

Very few incompatibilities. You can tell zsh to pretty much behave the same as bash and it’s unlikely your scripts will ever know the difference

What stops Mac users from pulling newer versions of bash ( and other GPL 3 goodies)?

That’s actually a good question and I’d love to hear about that.

Users? Nothing, I keep my bash up to date using homebrew, the thing here is about Apple, not its users.

I guess it seems like … for people who use shells, it is such a personal choice, and yet so easy to change, it doesn’t matter what the default shell is, as long as it it compatible with bourne? I was tcsh crazy for a while, and switched to it with every account and machine I got … then came bash …

It’s not like we’re talking kernels …

"it doesn’t matter what the default shell is, as long as it it compatible with bourne?"

well…mostly…yeah. But bash is so prominent that there’s a tendency to include bashisms in scripts, including ones with #!/bin/sh headers indicating any sh-compatible shell can run them.

So why can’t Apple just make that mainstream, and continue their otherwise excellent Unix support for people who care?

Thanks for the heads up in this article. I wouldn’t have known until it was too late, otherwise. I’m not a developer but do use bash shell for various things from time to time (get_iplayer mostly!) so it’s good to have those links to get used to zsh…

zsh offers a lot of very user friendly features that I think modern cli’s should have. This is a good move.

Install Oh My Zsh, add auto suggestions and syntax highlighting, (the two best features of fish) have a great time with your new shell! It’s made my command line experience so much more pleasant than with bash. I’m sure you can add these to bash some way or another too, but it’s easy with OMZ.

You can install newer versions of Bash with homebrew. Personally, while I try to be not opposed to change, I will probably keep using Bash for sometime. I work on many machines— some in a restrictive environment— so I will use bash since I can get it on all of them. But maybe ZSH is in my future.

View All Comments
Back to top ↑