Sponsorship
Linx
Build APIs and integrations faster. Designed for developers, Linx is a general-purpose low-code platform with similar power and flexibility as hand-coding. Try Linx today!
Not subscribed to Console? Subscribe now to get a list of new open-source projects curated by an Amazon engineer in your email every week.
Already subscribed? Refer 10 friends to Console and we’ll donate $100 to an open-source project of your choice!
Projects
darts
Darts is a python library for easy manipulation and forecasting of time series.
language: Python, stars: 2267, watchers: 38, forks: 171, issues: 23
last commit: August 19, 2021, first commit: September 13, 2018
airyx
Airyx is a BSD-based OS project that aims to provide an experience like and some compatibility with macOS.
language: Objective-C, stars: 1042, watchers: 37, forks: 23, issues: 24
last commit: August 18, 2021, first commit: January 31, 2021
snaprecovery
Snaprecovery allows you to recover old Snaps that have “disappeared” from Snapchat.
language: Shell, stars: 369, watchers: 4, forks: 14, issues: 1
last commit: August 18, 2021, first commit: January 02, 2021
topfew
Topfew finds the fields (or combinations of fields) which appear most often in a stream of records.
language: Go, stars: 72, watchers: 4, forks: 2, issues: 0
last commit: May 25, 2021, first commit: May 19, 2020
An Interview With Zoe Knox of Airyx
Hey Zoe! Thanks for joining us! Let’s start with your background. Where have you worked in the past, how did you learn how to program, and what languages or frameworks do you like?
I grew up at a time when personal computers were just becoming a big thing and I was always fascinated by them! I was also lucky enough to have parents who supported that interest. I taught myself to program in BASIC, then assembly language when I was about 12, and it just went from there… Since then I have worked at Bell Northern Research, Corel, e-smith, Mitel, helped run a small ISP during the shift to broadband, worked for myself and a handful of startups, and am now head of engineering at The OpenNMS Group.
I mostly program in C/C++, Objective-C/Objective-C++, Java, Javascript, shell scripts and occasionally assembly language. I’ve dabbled in other languages (perl, Python, LISP, Rust, Go) but am not very proficient in any of them.
I've always thought it would be interesting to start an ISP. What was that experience like? I would imagine it's highly competitive and very capital intensive.
Super competitive. I started there as a network engineer/Unix system admin and became sort of the unofficial manager. I got frustrated because the owner wasn't really interested in growth and I had to push them hard to adopt new technologies and keep up with times. It was a good learning experience though.
What sort of things did you learn?
I learned a lot about the physical connections and how the internet works - circuits and channels and framing and link-level stuff, and about routing protocols and all the plumbing that keeps it running. Computer and network security from the trenches. People management, conflict resolution, influencing. And yeah, lots of general business stuff which served me well later on!
What’s your most controversial programming opinion?
That optimization still matters and Moore’s Law isn’t an excuse for bloat. This probably isn’t as controversial anymore, but programmers for a long time seemed to ignore how much memory and CPU their software needed and just threw hardware at the problem. The number of times I’ve heard statements like “disk is cheap” or “RAM is cheap” is amazing. Now that it’s way harder to pack more and more transistors into a chip and as we’ve moved more into cloud environments where you pay for CPU and RAM usage, I think people are catching on to this idea again.
Why was Airyx started?
It really got started as a “because I can” project after a conversation. Apple had just announced the shift away from Intel architecture, and we were mostly joking about giving Intel MacBooks a longer life by making a compatible OS. But more seriously, I believe in open source and wanted a more transparent alternative to macOS that I could run on arbitrary x86 hardware - one that feels and looks as good, that can run at least some of my Mac applications, and that isn’t trying to make my laptop into a tablet.
Where did the name for Airyx come from?
It was originally called Helium but there are a lot of “Helium” projects and I wanted to avoid confusion. So I wanted a name that had a similar sense of lightness and airyness, of being easy or simple. And it had to be short and memorable. Of course I also had to find something where the domain name was available! After a lot of searching I landed on airyx.
What is the most challenging problem that’s been solved in Airyx, so far (code links to any particularly interesting sections are welcomed)?
One of the more challenging tasks was adapting the Cocoa frameworks from Cocotron to use the GNUstep Objective-C runtime, libobjc2. They were written to use a built-in objc runtime without a lot of modern features. A lot of stepping through stack frames and object files went into figuring out the differences in things like reference counting, implementing exception handlers and support for Tiny Strings.
https://github.com/mszoek/airyx/commit/e8490a8ac7f6d2974dd29ca77f96d70338e99c04
https://github.com/mszoek/airyx/commit/3218c92deb59d9ea0529f8f77841e77b3b9d6b79
https://github.com/mszoek/airyx/commit/035dafbe49a885d7715b1cf104ffaa92fe1dc11c
I think my linker magic to support ELF Frameworks is also pretty cool. Can I highlight that? :)
https://github.com/mszoek/airyx/commit/2d0acbfc958cd00a16a113401da176bc8dbb43af
Are there any competitors or projects similar to Airyx? If so, what were they lacking that made you consider building something new?
Yeah, absolutely! I don’t think of them as competitors so much as different directions. It’s very rare that one project meets everyone’s needs. Here are a few:
PureDarwin is a usable system based on Apple’s open-source code. It’s very cool and could be used as the basis of Airyx, but I chose FreeBSD for wider hardware support, more ready-to-run tools, and Linux compatibility.
GNUstep implements the NeXTStep APIs which were the basis of Cocoa and has added a lot since, but they’ve stayed very true to the NeXT look and feel and have built essentially a portable overlay onto a Unix-like system. Airyx is a full OS that integrates Cocoa natively and follows more of a modern aesthetic, so they’re fairly different. I probably could have built Airyx from FreeBSD + GNUstep and it would have been a massive fork. That felt like the wrong decision.
helloSystem does a great job of making a simple, usable, and fast system that feels like a Mac. We share a lot of code and ideas but do differ in some key areas.
Darling is an emulation layer for Linux that can execute Darwin binaries. It basically creates a VM environment where you can run stuff that thinks it is on Darwin. I’m very interested in this project for later when we attack binary compatibility! It differs from Airyx in that I see this sort of like Windows Subsystem for Linux - it’s a component of an OS that provides a compatibility layer, rather than the OS itself.
What are the key areas of differentiation between Airyx and helloSystem?
I think mainly that helloSystem is very much built on FreeBSD using the standard package set (so everything is in /usr/local) and that it intends to be very simple and easy to use by following some Mac paradigms but is otherwise FreeBSD. They're interested in some pieces of Airyx but we don't always agree on implementation details. A recent example is how to leverage LaunchServices.framework: https://github.com/mszoek/airyx/issues/37
Meanwhile my goal with Airyx is to build something elegant and simple to use, following a recent macOS aesthetic (more or less), but also to be compatible with it at a source level, eventually a binary level, to have the same user experience in terms of key bindings, consistency of keyboard shortcuts and menus throughout applications, to replace or supplement rc.d with launchd and launchctl and so on. Airyx leaves /usr/local empty for user additions and that was important to me. It uses a modified FreeBSD base OS with a patched compiler/linker and will likely also have kernel patches in the future to support Mach system calls, Mach-O object files, and possibly file systems. I don't think I could achieve the goals of Airyx without breaking a bit with the standard FreeBSD approach, although I know this will be controversial in some circles.
So it means Airyx and helloSystem can share code and collaborate but the two systems will likely always be distinct.
What is the release process like for Airyx?
Slow! It’s mostly just been me working on it until very recently. The first commit was Jan 30 2021. The first PoC was released around April, I think, and the current 0.2.2 PoC was released May 22. I’m aiming to have the substantially updated 0.3.0 build ready for September. You can check out the “Release notes” and Screenshots pages at https://airyx.org for a preview.
What is the best way for a new developer to contribute to Airyx?
Take a look at the GitHub issues list and see if there’s something you can fix. Join the IRC channel (#airyx on Libera) or hit me up on Twitter (@airyxOS) to talk about other ideas. There’s a lot to do and the roadmap is mostly in my head.
I really need developers who know Objective-C and C++ right now, especially folks who know Qt5 and can help with AppKit and UIKit. So if you’re reading this, please get in touch!
Are there any other projects besides Airyx that you’re working on?
I’m very lucky to work for a company making open-source software, so yes! My day job is managing the development of OpenNMS, a fully open-source enterprise network monitoring platform. My role there is different so I’ve been able to get multiple perspectives on OSS development, from the developer view, the community view, and also from the business view of running a successful business around open source. It’s extremely valuable. Also, we’re hiring!
Do you have any other project ideas that you haven’t started?
Oh my god, so many! I wish I had the time and resources to start and manage them all.
Care to elaborate?
Sure... one idea was to start building regional grassroots mesh networks to provide ubiquitous free wifi to everyone and remove the central control of internet providers.
Another was a site to rate healthcare providers on their service to specific groups like LGBT+ or racialized communities and then allow people to search it to find the closest or best provider for a certain specialty for people like them.
How about a regional book registry and loan service? You publish what you have, others do the same, and people can browse the selection, reserve and check out books from each other.
Do you have any suggestions for someone trying to make their first contribution to an open-source project?
Just go for it! I’ve learned so much from open-source code, and have met some really cool people. And some jerks - not everyone is great. Be prepared to be challenged and try to leave your ego at home, but also recognize when comments cross the line. If a project feels toxic, pick another one.
Pick a project that speaks to you personally - you’re doing this for free in your spare time so you need to believe in it. Look for the low-hanging fruit in the issues list. They’re often tagged as “good first issue” or something like that, or ask in the project chat/mailing list/whatever how to get going. And there are other ways to contribute as well - documentation, translation, artwork, testing, forum moderation, support… find something you can do and just do it!