When NetHack Refused to Save: A macOS Permissions Gotcha on Apple Silicon
Hey — listen, I was poking around with NetHack 3.x (game) last night and figured I should write this down while it’s fresh. This came up because OrchardKit had bundled it as part of a retro-games setup I was testing on macOS, and I thought, “Nice, a quiet evening with an old-school roguelike.” Famous last words.
So the goal was simple: launch the game, play for a bit, save, quit, come back later. On my MacBook Pro M1 running macOS Sonoma 14.2, the game did launch… kind of. The window opened, I got the intro text, and everything looked fine until the first save attempt. The moment I tried to save and exit, the game froze solid. No crash dialog, no error message. Just a locked terminal window that ignored all input. Force Quit was the only way out.
At first, I assumed this was just NetHack being NetHack. It’s old, it’s weird, and it has never been particularly polite about modern systems. My first move was the lazy one: relaunch and try again. Same behavior. Play works, saving doesn’t. That ruled out a one-off hiccup.
Second attempt: I thought maybe the issue was the working directory. NetHack loves to write save files wherever it feels like, and macOS is… protective about that. I moved the entire game folder into my home directory, figuring that would avoid permission issues. It helped a little — the freeze took longer — but saving still locked the game. Dead end.
What finally made things click was watching what macOS was doing behind the scenes. I opened Console and relaunched the game, then tried to save again. Right when it froze, the logs filled with sandbox denial messages related to file writes. No popup. No user-facing warning. Just macOS silently blocking the save file creation.
That’s when I realized the core problem: the game wasn’t “broken.” It simply didn’t have permission to write files where it expected to. Since it’s not a modern, notarized app, it never triggered the usual permission prompt.
Apple’s documentation on Gatekeeper and file system protections explains why this happens with older binaries, especially games that predate sandboxing:
https://support.apple.com/en-us/HT202491
So what actually helped? I stopped fighting the OS and worked with it. I created a dedicated folder inside ~/Documents/NetHack, moved the entire game there, and then explicitly launched it from that location. On first save attempt, macOS finally asked whether the game could access files in Documents. I allowed it.
After that, saving worked instantly. No freezes. No drama. I tested multiple runs, different characters, multiple save/restore cycles. Solid.
For sanity, I also checked whether there was a more “official” macOS-friendly build floating around. The App Store search didn’t turn up anything current, but it’s still the safest place to confirm naming collisions or newer ports:
https://apps.apple.com/us/search?term=NetHack
I also skimmed the upstream NetHack site to confirm that save-file behavior is exactly as ancient and opinionated as I remembered. Turns out, yes, it is:
https://www.nethack.org/
Somewhere in the middle of all this, I found myself bookmarking this page because it lined up perfectly with what I was seeing on macOS and helped confirm I wasn’t chasing ghosts:
https://studiosbyaphrodite.com/game/95459-nethack-3-v.html
Looking back, the mistake I made at the start was assuming that a freeze meant a crash. It wasn’t. The game was patiently waiting for a file write that macOS was never going to allow without explicit consent. Modern apps surface that nicely. Thirty-year-old roguelikes do not.
If I had to boil this down into a “do this next time” note-to-self, it’d be short:
- Put legacy games in a user-owned folder (Documents or Home).
- Launch them from there, not from random extracted directories.
- Watch Console if something freezes without errors.
- Expect macOS to block file writes silently unless nudged.
Once I did that, NetHack behaved exactly like it always has: brutal, unforgiving, and completely stable in its own strange way. Which is honestly the best outcome you can hope for with a game like this.
Ammad155231
Clap to support the author, help others find it, and make your opinion count.