It’s private from other OTP applications. It’s the stuff that is used by your app only. (In opposition to the include directory. But that’s an Erlang thing.) priv is rather a “resources that are mostly not code” directory.
Here is a quote from José Valim in 2015 on the topic. Not explicitly called out here but important to understand it was inherited from OTP itself. See :code.priv_dir/1
“priv” is like “OTP” where its name made sense at the beginning but today it has grown beyond that. All it matters now is that we put in the “priv” directory any artifact that you need in production alongside your code.