Yes, I agree with that. We're just looking at it from a different perspective.
In C++, reading through the header-tree in Linux and comparing that to OS-X and Windows, the bottom of the stack is roughly the same, with some small changes in the Apple headers, all the way back to Palo Alto. Higher up, they start to diverge more and more.
The only *NIX-es I've worked with for the last 10 years or so are Linux and OS-X. Together with Windows, they all share a POSIX parent, although the implementations are quite different. For things like sockets and threads, it's best to stick to it anyway, but the implementations of the more modern stuff varies wildly.
The serial and block model are as old as computing, where they all differ is the "everything is a file" view, as you said. And that also changes over time. But even in Windows, at the core you see the same model, where most (but not everything) is a file-like entity in the (virtual) directory tree. But that is only really used by the kernel and hidden as much as possible from users and programmers.