How One Game Hack Turned Into the OBS Streaming Revolution
Do you have aspirations to be the next YouTube or Twitch star? If so, odds are pretty good you’re going to want Open Broadcaster Software (OBS) for capturing video and live streaming your Counter-Strike talents.
In this you wouldn’t be too different from Hugh “Jim” Bailey, the creator of OBS. But in Bailey’s case, he has no ambition to be a YouTube star. Although he loves playing video games, his inspiration for creating OBS wasn’t fame. Instead, he had the simple need to capture part of his gaming screen on StarCraft so as to gain a bigger view of the minimap that displays enemy activity. A few hundred lines of code and a post to the StarCraft subreddit later, and “it just kind of spiraled into this crazy, super popular program,” Bailey says.
In a recent interview, Bailey claims the impetus to all this was that he was bored and there were no free tool options, but he’s being humble. His experience can tell us a great deal about how the most successful open source projects function.
Blame It on StarCraft
A coder from the age of eight, Bailey has no formal training in software development — no college and, except for one brief stint at the age of 18 (1999), no work experience.
“I never really had a real job in my life,” he says. Not that he hasn’t had interest, including from Twitch. “The fact that I had never worked with anyone before showed, and I failed that interview really bad,” he says. And he’s had at least one seven-figure offer for OBS, which he declined because he felt it wouldn’t have been good for OBS users.
Of his pre-OBS life, Bailey describes himself as a complete bum who was living with his dad. He also happened to be an excellent developer who built game engines for fun, with a particular need to “cheat” at StarCraft. He says that back then people were streaming their gameplay — specifically StarCraft — on the internet.
“When I was playing StarCraft, I dabbled with capture technology because — and this is going to sound stupid — in StarCraft you have this little thing called a minimap, and it shows you where your enemies are,” he explains. “I made this program that would capture the minimap and make it really big on my left screen, because I wanted to be able to spot if there was anybody incoming, making the game a little bit easier.”
That initial capture program was just a few hundred lines of code, incorporating things he’d learned about graphics, video capture, and more. He could have used something like the proprietary XSplit software to record and stream games, but says he was bored and there were no free tools. He had the opportunity to be first, so he quickly built a prototype over the next few months — “a very basic shell of a program” — mentioned it on Reddit, and it took over his life. But not just his.
As Bailey tells it, “I made it open source because it would need to be a community effort to make it the most optimal technology.” Solo, he could build something cool. With a community, he could build something amazing.
Better Together Through Open Source
To be clear, Bailey is an exceptional engineer. Early on, he said, he did things no one else had done. Microsoft, for example, had technology that allowed him to share textures between two processes without moving it off the graphics processor, creating a lightning-fast video capture method that no one had ever done.
“It just blew up from there,” he says, “It was wild. I had trouble keeping up and I still have trouble keeping up.”
Fortunately, he wasn’t hoarding it. From that first Reddit post, contributions poured in — including an OBS website created by Warchamp7, who has become a good friend of Bailey’s and a constant OBS contributor. In fact, many of those early contributors remain with OBS today.
Bailey set up the early infrastructure to channel that community, moving the code from SourceForge to GitHub almost immediately. Additionally, he set up an IRC channel where the community could talk.
“That’s where I did all my learning,” Bailey says. “I had to learn a lot of things because I didn’t know how to properly sync video and audio at first, as well as other things like that.”
The community continued to grow — and to teach Bailey — so he set up a forum where people could ask questions.
“I answered every post for two or three years,” Bailey says, but eventually it became too much for him. He left it to his growing community to answer the questions while he focused on coding.
“Before OBS I basically programmed everything for myself,” he says. He admits that he had never worked with other people much, which resulted in some coding practices that were by his own admission bad.
“OBS was a huge learning experience for me and I gobbled it all up. I loved it. It was just so wonderful to be able to meet so many people who’ve taught me so much. OBS wouldn’t be what it is without all the people involved. Having so many eyes on something can help elevate it to a level that you would have never expected.”
Although OBS is very much a community effort, Bailey still does a lot of coding — too much, in his view.
“I shouldn’t be coding,” he says. “There’s a point in an open source project where the maintainer should not be coding anymore. I’ve passed that.”
So far he can’t extricate himself from the coding commitments as he needs to deliver functionality for OBS sponsors. But it’s wearing him down.
“I’ve had so many times where I’ve been burned out and I just need to take a week or two off,” he says, “It’s been happening too much.”
Instead of coding he’d like to be paying down the 115 pull requests he currently has outstanding. However, having accepted funding from customers who help support OBS development, he has to keep working on those feature requests… which brings us back to community.
Advice to Other Projects
When asked to offer advice to other would-be project leads, Bailey didn’t mince words: “Don’t be a jerk. Your community reflects who you are,” he says. “The type of people that you bring into your community are a big reflection of you.”
Not surprisingly, then, Bailey works hard to make people feel welcome in the OBS community.
This isn’t always easy, however, because open source is inherently selfish. It’s always been about self-interest, which is evident in how companies choose to fund open source projects that advance their revenue goals. LIfe is no different in the world of OBS.
“I expected open source to be like rainbows and butterflies, with everybody working together in harmony, like, ‘Oh, this is open source. I’ve got this great code. Here you go’,” Bailey says, “But it’s not like that. People only contribute stuff that’s useful for them, almost exclusively. They usually don’t contribute code that is useful to everybody, though sometimes they do.” He says that sometimes people are trying to improve the project, but most of the time — maybe 80% of the time — whenever he sees a pull request for something or a request to merge code, it’s almost always for a narrow self-interest.
Worse, often the code from occasional contributors isn’t particularly good.
“It can be very difficult to review people’s code, because you want everything to be consistent in your project,” Bailey explains. Regular contributors know what is expected. But random, sporadic contributors are harder to manage.
Bailey being Bailey, he tries to understand the motivations behind these contributions, and work with them to improve the code to the point it can be included. If the code is bad but the idea is good, he’ll coach them on how to improve the code. Or he might fix the code himself, which, he admits, is not the most productive way to get people to learn to be better.
So it’s not all peace, love and open source, but Bailey says he wouldn’t give it up for anything. He admits that it’s not always much fun, but it’s still the best job he could have ever asked for, with some of the best people that he could ever hope to work with. And that’s enough.
At AWS we love to support builders of any kind, whether designer or developer (or some other kind of builder). If you or someone you know needs help with a different open source project, visit the AWS Open Source site to learn how open source projects can apply for AWS promotional credits.