Currently, and always, in Blender, zero-user datablocks without a fake user are not saved when saving a .blend file, so the next time that .blend file is re-opened, such datablocks are gone without any way to recover them. The same can also be achieved with the Purge Orphans operator, so no reloading of the .blend file is necessary. The Purge operator recently got a much needed "Recursive" option, which I find extremely useful; With this option enabled, not only will it purge zero-user datablocks, but also datablocks whose only users were zero-user datablocks.
This behaviour works great for cleaning up a .blend file after deleting complex elements like an entire character, and **I propose having this behaviour available also for saving files**. Personally, I would make this the default, but I know that could be controversial, so having it be an option that is disabled by default would still be welcome.
### Use case, sort of
Not only would this make perfect sense according to everyone I've talked to so far (@sybren @mont29 @Severin @simonthommes ) but also help us keep clean scenes during production. Currently, this can very easily happen:
- Animator duplicates an overridden character. All its objects get a .001 suffix.
- Animator deletes that copy, saves their file, and later re-opens it. Only one "layer" of unused objects has been cleaned, so there can still be orphan object datablocks lying around unseen.
- Animator duplicates the character again. Now the number suffix of their objects are all over the place. Some of them have .001 and others have .002.
As they continue working and duplicating characters, the old, unused objects slowly get deleted, and the name suffixes really get all over the place. It's not nice to get your objects names all mixed up like this, as things get really confusing when trying to troubleshoot problems in a production file, since everywhere where one object references another, the mismatching suffixes give the troubleshooter anxiety and uncertainty. The only way to avoid this currently is to tell the entire production team to always run a recursive Purge after deleting anything, which is very error-prone.
### Potential issues
- The current recursive purge purges Text datablocks, which is bad because they don't have the possibility of a "Fake User", so they should be excluded (or better yet, be included in the "fake user" system, and get a fake user by default). (T87489)
- Actions still don't have fake user enabled by default, which, as someone who's job it is to listen to animators complain about Blender all day, I think is a massive blunder. This long standing issue of Action datablocks "disappearing" on users and making them lose hours of work if they forget to click Fake User will be exacerbated by this change.