Traditionally, directories were readable using open() and read(), as if they were a regular file. The content one found there was a list of directory structures, see "struct dirent" in some system header files. The problem with this approach was that the binary layout of the structures was OS- and file system dependent, which made code that actually used the data read from directories really messy. So about 30 years ago, someone (don't remember whether it was Bell Labs, Berkeley or SysV) added the opendir() and readdir() functions, which simplified and standardized this. At this point, there was no longer an immediate need to read directories as if they were files.
Over the next few decades, various Unixes then disallowed reading directories directly with read(). If I remember right, Linux file systems prohibited it very early, because in the early 90s, Linux didn't have the baggage of lots of old software that had to be kept compatible. Interestingly, the *BSDs allowed reading directories for a very long time. And that's why cksum works: it can just read the directory. You can also use cat on them. The interesting one is "hexdump -C", which shows you the data structures. Recently, FreeBSD has turned this off. I don't remember exactly when, but the fact that you are running 11.4 and can still do it, and my home machine is running 12.2 can can no longer do it pretty much tells us when.