It's one of them, but it's really, really far ahead and there's a lot else going on. And I'm pretty sure that right now what you're asking yourself is why is that complicated? What's the complexity? And I can sort of like tackle two different series of complexities. The first kind is actually related to a series of things that happen in any sort of like medium to big open source project. Like these are generic complexities that most of us doing open source may face. For example, the fact that you care about the community. It may sound weird, but basically whenever you care about your community, whenever you do a release, you want also to produce the material so that your developers, the developers using your library, can actually consume it well. So in React Native, in particular, where we feel strongly about it, we have the changelog blogpost, we do diffs so that UpgradeHelper can show what you need to do, we have the documentation and a lot of other things. And also we do a lot of manual testing because yes, we trust CI, but also we don't. Also, the codebase moves really, really fast. In particular, in React Native, we have around 400 commits landing every month, which makes, you know, it's a challenge to keep up with that pace. And in particular, talking about code moving fast, since React Native depends on React, for example, depends on the Android and iOS ecosystems, we also need to keep moving fast enough so that we can catch up to all these other libraries. It may sound trivial, like, oh, well, React, you just need to bump the version library, right? Well, not really. For React Native to use a specific version of React, it needs to have a sync commit where some manual work is involved. And I left there an example. But talking about React Native-specific complexities, I've sort of, like, tackled two in this slide. One, which is probably the one there's most misconception around, is that Facebook is the owner of React Native, but the community manages the releases. And this is something that, and I'll talk a bit more about it later, like, it's been improving, but Facebook internally, in their monorepo, they use React Native. Like, they don't do React Native in it, so their experience of the code is different. Also, because the code of React Native is not open source first, as it happens for React, but it's a mirror of the code they have in their monorepo, when a person from the React Native team does a commit internally, then that gets replicated into the master branch of the open source version without going through the standard PR procedure. It doesn't go through the same CI. So sometimes, because the CI internal and the CI external are different, sometimes the CI external may break. And also, Facebook can always have the last word or the last say. Or they can decide something about release, and we have to keep up with these new requirements. Also, because as I mentioned, the codebase moves fast, and the release process goes through branches, so per each stable release, we do a branch. Sometimes it's hard to do patch releases. So if, let's say, 62.1, we wanted to cherrypick a commit, but this commit landed, let's say, two months after the point in which we cut the branch, cherrypicking it, which is a procedure in Git to take a commit and reapply it into a branch, may lead to conflicts. So that introduces a bit of complexity. So, as I mentioned, while there are these complexities, in particular the Facebook aspect, it's improving, like it's improving a lot, and I'm going to mention a bit more about it in a bit. But now, let's review those steps. As I was saying, a lot of work, a lot of iterations, a lot of steps that we do here are not strictly because of the code, but because we care.
Comments