The first small piece of the Plex Media Server was committed inauspiciously enough on September 20th, 2008, right after 11:30pm. I was probably tired, and possibly drunk. It was just eight months after the very first pre-alpha release of our OSXBMC media center app, which goes to show you how committed we were to making a server.
It took almost exactly two years of hard work after that first commit for the first public release of the Plex Media Server on August 30th, 2010, and we’ve been working on it ever since! Over seven and a half years, we’ve crafted a quarter million lines of code, working day and night across six continents, committed to making the best media server this planet has ever seen.
We’ve been asked numerous times over the years about our rather precise and fractional versioning scheme, to which I have always had the same pithy reply. I think that most engineers have a general sense of insecurity about their creations: there’s always one more feature which needs adding or one more bug which needs fixing before you could possibly consider it v1.0. If you’re a civil or mechanical engineer, you have to eventually ship the damn bridge, but as software engineers, we’re generally afforded the luxury of small, continuous improvements. It’s a blessing and a curse.
Shipping software with a release number below v1.0 brings a certain mindset. It’s technically beta, which means a few (small, but meaningful) things: for the user, it hints at instability (hey, it could set your house on fire, or make your marsupials go extinct!) and for the engineer, it’s a temptation to make bigger, bolder, possibly breaking changes (hey, it’s just a beta!). Neither of those are super positive things.
One could argue (quite successfully, I think), that the Plex Media Server should have reached v1.0 a long time ago. Millions of people are using it, it’s generally stable, and we release regular updates. We’ve improved our QA process, increased the size of our team, and done lots of growing up in general around our software processes. So without further ado, I’ll skip to the end and let you all know that—with an extreme sense of pride and just a hint of a tear in my eye—we’re incredibly happy to be releasing v1.0 of the Plex Media Server to you today.
I’d like to take you on a little tour on the eve of this historic release, which I consider as much a beginning as anything else. Consider it a commitment from us to take our post-v1.0 responsibilities seriously: to ship reliable software, to (finally!) document our APIs, and in general to work relentlessly to make this the best piece of software we possibly can. We’re also taking the opportunity to clean up our download archives (which were growing somewhat impressively), and will only be offering v1.0+ from here on. Having issues reported against older versions and in general not doing everything to ensure people were on the newest release has definitely had an impact on our support team.
Teamet: I’m proud to say the team I work alongside with on the media server is absolutely world-class. We’ve got engineers who were working at Google, Microsoft, other great companies, and the Australian outback (“That’s not a knife. Clearly that’s C++!”). It’s a killer (and growing) team of coders. Want to dance? Send us a resume.
The Labs: Our continuous integration system builds 23 different variants of the media server for an incredibly wide range of targets, from iOS (yep, our app contains a complete embedded media server for synced content) to FreeBSD. We ship on a wide range of NAS devices. To make this all possible, we’ve been building out a giant test lab in our Los Gatos headquarters (live nearby? stop by and say hello!) which takes up the entire second story (pictured below in its early days). There are racks full of NAS devices, Smart TVs, and the lab is bustling with our growing team of QA engineers.
The Transcoder: This is the core of the media server, which allows us to convert different media formats on-the-fly for streaming, as well as for sync and our media optimizer. For a long while we actually shipped two versions of the transcoder in each server: an older version, for backwards compatibility, and a more modern version. We’ve recently dropped the old version, and re-synced the modern version to upstream ffmpeg (and will continue to keep it closely up to date). We’ve continued to build new functionality on top as well, such as rich support for converting and repackaging subtitles alongside video.
The Relay: Sometimes the best pieces of technology are invisible. Over the years, we noticed that one of the big challenges people have is getting their home network configured to allow remote access. Not everyone is married to / matched on Tinder with a network engineer, after all. So quietly, we spent a few months building out a global infrastructure and designing a sophisticated system with end-to-end encryption, which can proxy communications when it’s not possible for our apps to connect directly to a server.
The Security: About a year ago, we launched our universal security upgrade, which provided free SSL certificates for all our users. It was, according to our friends at DigiCert, quite possibly the largest IoT rollout of certificates ever done before, combined with a scaleable, custom-built DNS service we built to support it.
The Future: It’s bright! We could have never possibly imagined over seven years ago that people would be able to download the server for dozens of platforms, get world-class encryption built in, and have a global network of relays standing by to help get media from the server to our huge ecosystem of applications.
We specifically picked v1.0 because it strongly signals there is much to come (other suggestions included 10.0 and 3.11). We have huge plans for the server, as well as our platform as a whole.
Another perfect (and timely) example of this sort of “growing up” is our brand new website, which is also launching today. We’ve completely rebuilt it from the ground up, split out the actual web pages from the backend API for improved scalability and to use a modern CMS, and performed a bunch of user testing on the site. A far cry from our very first website, which was mostly designed by monkeys, written using vi, and user tested by someone’s pet iguana who just happened to walk across the keyboard at the right time.
In closing, I wanted to take a moment and thank everyone who’s used the media server over the years, and who’s contributed to it, either via blog comment, forum post, social media, or email. We’ve met a lot of lovely people, hired some of them, and made friends with even more.
Here’s to the next seven years!
(Last, but not least, a special thanks to the dog who’s been here the whole time, keeping me company on all the long days and late nights.)