How to work full-time without a salary, aka do FOSS.
13 XII 2023
5.7k
As much as I'd love to give advice on how to not work like me, I unfortunately don't have much experience in that. So, instead, I can give you tips on how to write code full-time for (almost) free. Or, in other words, how to not go insane from working in FOSS without an actual job paying you to do so.
Unless you are employed by a company to develop foss, or are an important member of a group or foundation that is getting enough sponsorships from other companies, you are not going to get a stable income, or, more often than not, any.
However, it's worth noting that I, amongst a few other people, believe that writing FOSS with the goal of making money is a terrible mistake from the get-go.
Most FOSS projects get started because the author is bored, passionate about coding, sees the lack of a tool they'd like, a masochist, an idiot, or all of the above like I was with hyprland.
Before you begin writing code, you need to ask yourself: what do I want to write? Do you want to write something to learn to code? Have you found something underdeveloped and want to make a better alternative? Or maybe something completely new?
The most common reason is the first one, and that one usually makes beginner programmers the most confused, as they can't decide on what to write. Annoying people might ask around "what should I write to get to company XYZ?". A bit less annoying people might ask "what should I write to learn language XYZ?". The reality is, anything, really.
What I usually recommend such people is to write a clone of something simple they have used / use daily. Painting app, calculator, tetris, hentai reader, whatever.
Such apps have a bunch of unique challenges that will teach you different areas and skills. Even better, many have a lot of room for improvement. Calculator done? Add expression parsing. Add equality solvers. Add more functions. Add graphs. Tons of shit to be done, really.
Want to improve further? Write 3 different apps. Review the code of each. Find your mistakes. Fix them. Rewrite shit better. Read others' code. Don't read boring books.
When it comes to projects to fill a gap or improve something, I usually recommend people to have a more-or-less good understanding of programming and the language they are writing in. Many people try to write the next Windows after just learning what a variable is. You will fail. And even if it will "work", it most likely will still be an utter technical failure with garbage code, terrible performance and tons of fundamental design mistakes. (I mean, see my old projects like Mosaic)
Please, please, please. DESIGN first. So many development issues arise from lack of forethought in the design. Some poor decisions in Hyprland took a good few days to fix and sizeable code reworks, while adding some new bugs that needed to be ironed out. Some still remain. However, my experience with Hypr has given me a few good lessons on what I did very poorly and fortunately at least those didn't creep into Hyprland.
It's not about writing out every class and every struct and their members, but about sketching out "modules" of your code and how they should interact. Think about what you might want to exchange, how things might work with each other, etc.
Once your project takes off, if it does at all, you will have to manage a form of a community. Whether it will be on github, discord, myspace or whatever else you might use, you will have to deal with the hell that is humans.
We, as programmers, are known to often have social skills comparable to a dead rat's. In such cases, we might be easily annoyed, swayed into poor decisions, etc. However, you must remember that for your project, the most important thing is purely the code.
Yes, publicity, documentation, etc. are all important too, but ultimately, it's the code that people use.
In order of importance, code first, then documentation, then publicity.
What I always tell people is if your program doesn't work on the first boot on the user's computer, it's already failed in most cases. Obviously, sometimes you can't do much (thanks nvidia) but you should strive to keep the defaults just working.
Another thing I found very helpful is assertiveness. DO NOT get swayed by what people want. It's obviously important to consider how people are using your software, but it's also worth noting that 99.9% of users reporting issues / requesting features do not know shit about your code. In many cases, their idea might be a stupid one and you could make something different that would also fit their needs. (or, well, tell them to adjust to a better workflow and stop being cringe)
I also always advocate for staying off politics non-related to foss/your code. No point in sharing your opinions on societal / geopolitical / religious issues on accounts that are tied to your code. You will only antagonize people who disagree with you. If people try to get those opinions out of you forcefully, (unfortunately happens to me a fair bunch, and probably will to you too if you get popular) simply continue to deny doing so. Those people are just seeking attention and drama.
Code when you have free time and feel like it. Really. Some issues are 5-minute fixes that you can code while you are in between playing cs2 matches with your friends.
I'd not recommend prioritizing FOSS over your personal stuff, though. You're working for (almost) free, after all, and nobody is entitled to your support or labor, even if some assholes might act like they are.
Fix 1-2 5-minute bugs a day and you can also be called a "responsive and active developer" :)
This might be a little secret of mine, but sometimes when I commit 7 times in one day I spent like 25 minutes total coding that day. Some days I spend 5 minutes on Hyprland, some I spend 5 hours. And people still believe I work all day all night! :P
Honestly, I do not know how I have been coding hyprland daily for like... 1.5 years straight by now, without any days off. Maybe I am too much of a masochist.
After a while, it'll just become a routine. You check out what happens in your notifications daily, you read them, respond, commit a change or two. If you feel like it, you'll solve 10. If you don't, you'll solve a half of one.
I think you either have to be a masochist or just love programming. Or both.
So, general advice, "good luck"
FOSS is definitely not a place where you can become the next Mark the Reptilian Zuckerberg or Elongated Muskrat. However, with some self-discipline and masochism / passion, you can make it more or less fun while your project gives you joy in the form of being enjoyed by users.
And no, I am not planning on dropping Hyprland any time soon, I need to surpass GNOME in popularity first. :)