It seems like the status quo in the games industry is to write most software in-house, maybe excluding the engine if you use one of the dozen or so big ones. Before working here I was mostly an open-source developer, so this mindset seems downright crazy to me. Is there any good way we can all stop building things like log viewers, network diagnostics, and patching systems?
We can stop reinventing the wheel by... ceasing to reinvent the wheel. Use external libraries, game engines, etc.
I get the sense that people do reinvent the wheel to:
- Avoid copyrights, royalties, etc on libraries or borrowed code
- Avoid paying for a game engine (for a full on AAA game, this can be enormously expensive)
- Maintain intimate familiarity with the entire codebase--adding external libraries, linking to game engines, etc just means more code to become familiar with and possibly maintain
- Writing all your code yourself means that you can optimize it specifically for your game
- That code can then be licensed to others if desired, reuse it for other projects, etc while you maintain proprietary control
It depends. I think there is actually a fair amount of middle-ware out there, that gets used, ... if you are willing to pay of it.
At the same time sometimes it is easy to hack something to get really fast without that many external dependencies, if the scope is small.
I think on the highend, you have to compare companies like EA and Ubisoft to other large software companies, like Apple, Google, Facebook, what have you.
They all write a very large amount of custom code, when there are existing alternatives, because they want to get a competitive advantage.
As @Sean James said there are legal reasons and host of other reasons, but I think even if there were no road blocks, inventive software companies would still develop custom alternatives to common existing software components if they thought they could make them better.
However I also agree that there is always room to start some projects we all could benefit from. For instance, I think we need to replace COLLADA with something much simpler that is JSON based. Maybe something that only handles arbitrary meshes, but nothing else. I think we really need a better mesh format.
Is there any good way we can all stop building things like log viewers, network diagnostics, and patching systems?
In my experience, these things are treated as simple extras that can be bolted on alongside your 'real' programming. Of course, they turn out to be far from simple and far from 'extra', being complex and important parts of the system, but by then there's already too much investment in the bespoke version.
Are there good open-source or commercial libraries that provide this type of functionality? I am not sure there are, and until someone steps up and provides one, it'll stay this way. The business developers often aren't able to produce libraries that are suitable for games ("what, you mean you can't completely remove all the calls in a Release build?!") and game developers are often uninterested in making this sort of thing as a standalone package when they have a game to be getting on with.