I've always blamed the licensing. Lots of people adopted BSD and Linux in the early years.
The Linux users gave back (often because they had to) and the BSD users often didn't.
Which is a consequence of BSD style licenses, yet every time a project switches from GPL to something in the BSD spirit there are jumps of joy.
So in the long run it is back to the old freeware days, with the lower lever free and everything on top closed, with zero contributions.
That didn't seem to work the same way for say.. mail server software?
Sendmail, postfix and qmail all had BSD-ish licenses, and those three covered quite a majority of all opensource mail serving at the time of BSD-vs-Linux "in the same early years"
PostgreSQL, LLVM, Apache, Nginx, Xorg - all of those are covered by liberal licenses, not copyleft ones.
Drivers for hardware that is better supported in Linux compared to FreeBSD - 90% of which is graphics - are usually licensed as MIT or BSD, not GPL, even though they are shipped as part of the Linux kernel.
So, nah, it's not the license.
Now what exactly created this divide to begin with is a matter of debate but it took place mostly in the 90's and the very early 00's. By the mid 2000's it was clear that BSDs would have a really hard time ever catching up with Linux, especially for non-server applications.
Paradoxically it might be partially why BSDs are so clean and tidy: fewer features, fewer contributors and of course they're making a complete operating system instead of just a kernel or just a distribution.
FreeBSD remains my favourite OS for servers, it's rock solid and a joy to administrate. Unfortunately for the desktop I've given up almost a decade ago, driver support is just too lackluster, especially (as you mention) for proprietary software that can't be easily ported.