The second happens when people join, typically fresh out of school, and never build their skills, always kind of hanging on in the fringe. It's quite easy in a large company like HP, too... it's harder to fire the same guy you wouldn't hire,so to speak.
A recent "Town Hall" had an executive telling us all that a manager would re-evaluate the positions that were left by personnel quitting (imagine that), including who they'd hire in that spot.
He also expected us to report to offices, even if there was no space, because engineers love to work off of 15" laptop screens, on laptop keyboards, while sitting on a bench at a cafeteria table (yes, he said we should make the "up to 95 mile" drive even if it means working in the cafeteria) as others wander around, eating and talking. The ultimate open office space.
So when a manager has to fire a direct report, it's a tough proposition... fire a warm body and possibly lose the spot outright, or let them hang in and keep your manpower up enough to keep your own job? They know these guys are borderline, but a big company is a machine unto itself.
If they do fire anybody... it usually ends up being based solely on salary and location, based on what I saw this past week - they WFRed a bunch of guys who were responsible for millions of lines of good, solid code. Tested, true libraries that have run for ages in hundreds of thousands of PCs.... people tossed aside on a whim from on higher up than the managers they report to. Why? Because again, a big company is a machine unto itself... often the actions of execs and the upper management is pure quackery, because they can be just as clueless as anybody else in an organization; it's also a bit worse, because it's a club of privileged people who protect each other from personal failure, even at the expense of the companies they run.