
I published a Blender addon <https://github.com/ldo/blendgit/> that lets you use Git to track versions of Blender documents and associated files. This addon makes heavy use of both hard links and symlinks in order to set up the directory tree snapshots correctly. Every now and then a Windows user tries to run it, and it fails for them with the peculiar error “symbolic link privilege not held”. It seems Microsoft added the ability to create symlinks in Windows back around the time of Windows Vista or 7 or so. But it puts a major obstacle in the way of users attempting to use this facility: you need to enter yourself into a special privilege group <https://social.msdn.microsoft.com/Forums/en-US/cf9d0948-b80e-436e-b5c4-8ca88efc6431/error-error-linking-symbolic-link-privilege-not-held?forum=windowssecurity>. Or take the standard Windows lazy way out, and simply “run as administrator”. On Linux and other POSIXy systems, creating links is just a routine operation; why does Windows treat it as such a sensitive issue? In fact, even in the POSIX world, symbolic links can be a source of security problems <https://en.wikipedia.org/wiki/Symlink_race>. Symlinks were invented at the University of California at Berkeley way back in the early days of their BSD work, and the security implications only became apparent later. By that time, I think, they had become so useful and commonplace that no one wanted to get rid of them. So the workarounds were created, as the holes were uncovered. These days, the techniques have become commonplace, embedded in various library/system routines that will work securely without you having to give them a second thought. But on Windows, the whole concept is still new and untried (even after over a decade!). Very few people know how to use them, because when they try, they encounter the privilege restrictions, and that puts them off. And so the application developers hardly ever encounter the need to deal with them. And so they never become a commonplace facility that application software can be trusted to deal with.