/proc is a filesystem because user processes can navigate through it with familiar system calls and library calls, like opendir(), readdir(), chdir() and getcwd(). Even open(), read() and close() work on a lot of the "files" that appear in /proc. For most intents and almost all purposes, /proc is a filesystem, despite the fact that its files dont't possessdon’t occupy blocks on some disk.
I suppose we should all clarify what definition of the word "filesystem"term “file system” we are currently useusing. In the context of ext4, when we write "filesystem"“file system”, we'rewe’re probably talking about the combination of a layout of disk blocks, and specification of metadata information about the disk blocks that also resides somewhere on disk, and the code that deals with that on-disk layout. In the context of /usr, /tmp, /var/run and so on, we'rewe’re writing about annan understanding or a shared conceptualization of how to name some things. Those two uses of the word "filesystem"term “file system” are indeed quite different. /proc is really part of the second "filesystem"kind of “file system”, as you'veyou’ve noted.