Open source has been a hot topic again lately, and I’ve had some thoughts piling up for a while, so I’m writing them down.
I’ve always thought GitHub is a strange and kind of wonderful place. As far as I can tell, a code repository is the only place in the world where people publish everything they’ve worked on, in full, for free. I’ve never seen people be this generous with their own work anywhere else. GitHub is the only environment I know where that’s simply normal.
And you’re not doing it alone. Strangers from all over the world show up and build with you, for nothing. That’s the part I enjoy most: a group of people who have never met, slowly making a project better together. I suspect most people who love open source feel the same way. I’ve never thought of it as a way to make money. If someone wants to sponsor me, great, but so far not many have. Maybe I haven’t contributed enough, or maybe I just haven’t built enough things people find useful.
I have a lot of projects on GitHub now. Every week I get dozens of pull requests, and nearly all of them come from people outside China. I also get plenty of issues from Chinese users. After a while I noticed a pattern. On projects aimed at Chinese users, or where most of the users happen to be Chinese, people open issues and almost nobody sends a PR. I’ve thought about why. Part of it is probably that a lot of those users aren’t programmers. They’re curious, they want to play with the thing, and they don’t write code for a living. That’s fine.
But there’s another group too. Some people fork your project, strip out every trace that you ever existed, put up a website for it, and then either sell it or pass it off as their own work.
I’ve even seen this from across an interview table. I’ve interviewed a lot of candidates, and more than once someone has told me they designed and built a project entirely by themselves. Then I asked a few questions about it and got no real answers. I went through the Git history afterward and found nothing pointing to an original author. Whoever cleaned it up had done a thorough job. Then I picked a random function from the code, searched for it on GitHub, and found the exact same project. I still think about that one. Was the candidate just not very bright, or was the interviewer a little too bright?
Most of the people I deal with are nothing like that, and I’m grateful to them. A lot of the issues I get are feature requests, but in my experience most people are friendly about it. They don’t insist that I build what they asked for, and they don’t chase me to fix things faster. They report bugs and they test things for me, and I really appreciate it.
Of course, I’ve also met some people who weren’t so pleasant. They decide your project has too many problems, or it falls over when they run it, and they show up to scold you. Some take the moral high ground and tell you that you never should have open-sourced something this bad. I still don’t think that’s a good way to talk to anyone. An open source community is something we all keep alive together. Follow the license, and follow basic manners. You didn’t pay anything for this, and nobody owes you a perfect product.
I’d love for this community to keep getting better, with fewer people who have no manners and fewer companies that have none either. Over the years I’ve watched friends build really, really good products, only to have a commercial company copy them and turn them into a paid product. The original authors didn’t get paid. They didn’t get a sponsorship, and nobody even told them. The company just took all of their code. I hate that, and I think it’s completely fair to call it out. But I don’t think it’s a reason for any of us to stop open-sourcing.
Some people go further and say that now that AI is here, open source doesn’t really matter anymore. I don’t see it that way. Everyone is entitled to their own view, but mine comes from how I approach things in general: I like trying everything new. Part of that is novelty. The bigger part is that I think you should keep learning and exploring for your whole life. That feels like time well spent to me.
It shows up in my work. A lot of people believe that if an old system runs fine and you need a new feature, you should build it on top of the old system. I see it completely differently. That system was built on technology from ten or twenty years ago, and by today’s standards it’s probably full of holes, slow, and painful to maintain. So I’d rather rebuild it from zero, and that’s exactly what I’ve been doing at work. With AI helping, I rebuilt that system on my own, and fast. Today almost all of our old systems are on their way to retirement, and everything is moving to the new one.
Frameworks are the same story. I’ve always disliked Electron. It eats an enormous amount of disk space and memory, which in my book makes it a bad framework, and I’ve never been willing to use it in any project. Recently someone on Twitter who goes by 低空飞行 (@localhost_4173) open-sourced a framework called MyGo. I tried it right away and used it to write the Motrix downloader. It was really nice to work with, and it even ships with its own Sparkle-style updater. When GPUI took off, I built a few things with that too. I keep hunting for the cross-platform framework that’s actually pleasant to use. I tried Objective-C and Swift, then realized they weren’t a good fit for an app that has to live on both Android and iOS, so I moved on to Expo. I’m still using it for now, though I wouldn’t call it great either. It’s just the closest I’ve gotten so far, and I’m still looking. I’m always picking up new frameworks and languages. I even have an API written in Zig.
Most of what I just listed is open source. Nearly every app and piece of software out there today runs on open source projects. Without them, most of those products probably couldn’t have been built at all. What we’re all doing is, how do I put it, the foundation. All these good apps exist because those projects exist. I’m grateful for that. Some of the frameworks I use are so well made that I feel thankful every time I reach for them. Without them I might have lost an extra three days, five days, maybe ten.
That’s how I think about my own projects too. Lately I’ve been building a Feishu bot (Feishu is the Chinese name for Lark), and when I looked at what they publish for developers, there was a Node SDK and that was it. Nothing for Swift. So I immediately started a project to write a Swift SDK myself.
That project is never going to make me any money, and ByteDance certainly isn’t going to pay me for it. I still think it’s worth doing. Maybe someday someone will have exactly the same need I had. They’ll want to hook up to Lark from Swift, find out there’s no official SDK, and come across my project on GitHub or Google. If they use it, it’ll probably save them a lot of time. I paid for this out of my own pocket and put a lot of tokens and a lot of hours into it. If one day it helps even one person save five minutes, that means a lot to me.
I’ve never needed my open source work to help a lot of people. If it helped one person, at some point in the past or at some point in the future, that’s enough. At least I’m contributing what I can.