The problem with having a common library of code shared between desktop programmers and embedded systems programmers is that each group has different methodologies and goals.
If a bit of code is present in which performing a particular action sets of a series of complex events that end up reserving 1000 bytes of memory, but then never saying, “I'm done with that bit of memory now,” the two groups have different takes on the matter.
The one group would say: “Meh! Only 1K? There are, like, a million K in a modern computer, it's no big deal.” In a sense, they are right. Most users have gotten used to the fact that if they leave a program running for several days, it will end up crashing and they just restart it. This is not the way things should be, but the way they simply are. Large, unnamed computer companies have bred mediocrity into desktop users.
The other group would be much more freaked out about the lost memory. They are writing code for much smaller machines–ones that do not have the luxury of saying “Meh! We have a lot of memory! Who cares!” They are also writing code for mission-critical hardware, where it is unacceptable to say “when it stops responding, turn if off then back on.”
Of course, nobody has the time to track down the maze of twisty code that causes the problem. It's enough to make you not want to share code anymore, which might actually end up being the ultimate solution (or at least a couple of files that the other group can use, but never change.)