GitHub Sunsetting Subversion Support
github.blog
github.blog
We released this feature and published the announcing blog post, on April Fool's Day, 2010. I remember demoing it to the other GitHub guys and saying how funny it would be if we made this an April Fool's day post as though it was a big stupid joke but then it actually completely worked on every repository we had and we all thought it would be great. Until nobody believed us. Which in hindsight we should have seen coming, since that was the joke, but nobody actually tried it. Then people tried it and it worked and they thought it was a trick or something.
It was really helpful for people migrating from legacy SVN based systems to us (CI and stuff) but I'm surprised to some degree that it's still running 13 years later when nobody is really facing that issue anymore. And I'm still undecided if the joke was worth the massive confusion it caused. But if I'm pressed, I would say that I would 100% release it on April Fool's Day again.
I wanted to announce this on April Fool's Day, but just couldn't make the timing work.
Thank you for not doing that. Releasing a wacky feature on April 1 is funny. Discontinuing a service that people might rely on is distinctly un-funny.
I don’t actually think it would cause any problems personally, but I’m astonished at the flip dismissal of a “few support calls”.
FTP is a pretty clunky protocol: it's round-trip heavy, not friendly to NAT on the client-side when you don't use PASV, not friendly to firewalls on the server-side when you do. I'm not sure what benefits there are to it these days.
A file server that supports static serving, uploading
MIT/Apache-2 in Rust
It works not only with ftp but sftp, s3, webdav and pretty much any other storage backend you can think of.
I remember having this problem with Gmail's "1GB for everyone!" April 1 announcement.
AF is a day with a mix of corpos trying So Hard To Be Cool (remember this shit? https://www.theverge.com/2016/4/1/11344044/google-gmail-mic-...) and plainer-than-usual disinformation campaigns.
The only redeeming thing about that day is I get to have an excuse to not be reachable for a day and can be disconnected for a while. Hopefully my loved ones don't end up in the hospital on bad timing.
https://archive.google.com/tisp/index.html
As with any prank or joke there is a skill and art to telling a good one. But I don't think we should let bad pranks outlaw humour in general.
> #6 Insert the TiSP installation CD and run the setup utility to install the Google Toolbar (required) and the rest of the TiSP software, which will automatically configure your computer's network settings.
As well as some less subtle jokes as well :)
Bring back Google TISP I say.
https://www.leevalley.com/en-ca/shop/tools/hand-tools/markin...
It's still running because Subversion has better CLI.
PS The joke is not that funny when it lasts for 13 years. Ha-ha, how funny (not).
A few different SVN -> Git migration tools failed to migrate a large legacy repo at a previous employer. I thought I was doomed to be stuck on subversion forever.
It was GitHub's migration that finally worked and got us migrated across.
Funny we were only svn because I had previously been part of an effort to migrate them to svn when I'd joined a few years prior because before that they were using an old TFS system where developers would block each other by checking out files which would lock them for the whole repo.
I knew that switching immediately to git would have been too much of a culture shock so I got them over to a CVS where people could at least work independently first. ( I also have a soft spot for svn anyway, I think for many small teams it works just as well as git with fewer opportunities to shoot oneself in the foot. )
[1] https://docs.github.com/en/get-started/importing-your-projec...
heh heh heh, yeah nobody
Similarly, I added support to del.icio.us for color: urls for april fool's. It worked, correctly, everywhere.
Obviously it's unimportant compared to the rest of the post, but, in case you like to know, the feature is your brainchild. You would be its brainparent, I guess.
I have to point out that you've reversed the meaning of this word...
I imagine some of those are overcome by enforcing heuristics (e.g. the branches/tags/trunk hierarchy is mandatory and has business logic run based on it), but I'm really curious if there was ever a more detailed writeup on how it works?
Nothing lasts longer than a temporary fix.
[1]: https://github.blog/changelog/2021-08-10-brownout-notice-api...
Scream test is to discontinue service entirely and see who screams, akin to pulling the plug on a server in a rack when you've got no idea what's running on it, to then plug in back in when you find out it's the finance team running payroll software.
Brown outs are typically short-lived purposeful errors or aborts to either shed load to prevent a failure due to capacity exhaustion or cause issues that are investigated by a human to find the service has been sunsetted which raise awareness that something needs to be fixed before it's totally broken.
[0]: https://it.slashdot.org/story/18/03/08/2049255/slack-is-shut...
So now we are stuck. Stick with unsupported Jira Server, pay $40k/yr for Jira Data Center (!!) or switch with all the business costs associated with that.
Seems likely to me that some significant percentage of GitHub SVN usage comes from decade-old scripts running on a build server somewhere. I suspect most of those users will choose to rewrite the script rather than moving to a new provider.
> About 91% of visitors are on Windows. Mac users make up 5% and Linux is 2%. The other 2% are permabanned IRC trolls browsing the forums with a text-based browser written in Ruby on OpenBSD. Oh yeah, we have one guy using WebTV but I banned him because WTF.
Yes, I know the many ways that git is better in practice, and would miss some of the workflows git's nature allows if they were gone. But we really did lose something too, especially when running git in "quasi-centralized" mode such as on GitHub.
I found this amusing.
Mercurial does somewhat better in that department by storing the branch name in the commit, so you can pick the parent on the same branch reliably.
In `git merge feature`, `feature` will become the second parent while the commit that you are on will become the first. The linear mainline history falls out of that.
However, if you have infrastructure that prevents fast-forward merges to main (prevent developers from pushing directly to main, allow only PR merges and disable fast-forward merges for that), then the `--first-parent` approach can work.
I did say merge, did I not? Yes.
> > If you have a main branch which is always merged into then
If fast-forward is a “merge” too then fuck it, I can’t be bothered to use Git lingo since every idiotic little thing needs to be qualified (see also: Git tag, which is sometimes only an annotated tag but also sometimes also its cousin “lightweight tag”).
I guess I should have said “merge merge”. Huh.
You said "git merge feature", which _does_ perform a fast-forward when possible. In my experience, developers on a large enough project will inevitably break Git in a creative way, and this is one of them.
This is the default because "git pull" performs a merge by default. You _want_ that to fast-forward when possible or everyone will create a merge commit every time they pull updates.
For someone to break the mainline parentage they would have to:
1. Do that ugly merge of mainline into their feature branch[1]
2. When they are ready to “incorporate” their commits into mainline: do a fast-forward since that’s apparently possible
But the proposed setup contradicts this chain of events: if their Git config was set up to do a fast-forward when possible, then a proper merge (a merge commit) wouldn’t have happened in stage 1 if mainline and `feature` had not diverged. And since that means that the two have diverged (evidenced by the merge commit), you cannot do a fast-forward in step 2.
And even if the above somehow is not true: step 2 is impossible because now `feature` contains a merge commit from mainline into `feature`, which mainline does not have. So a fast-forward is impossible.
What am I missing here?
[1] Oh right, I have to be specify now: a proper merge, a merge commit. The one with two parents, not an octopus one. Explicit enough already?
> You _want_ that to fast-forward when possible or everyone will create a merge commit every time they pull updates.
Surely this makes only a tiny difference in practice. We’re just a handful of developers and people usually diverge from mainline before they get their PR merged. So there are merge commits going from mainline into feature branches absolutely everywhere, because only two or three of us use rebase.
But I do in fact seem to recall talking to one of the other developers about him breaking the conventional commit parentage at some point in the history. So there is some bump there, a few years back.
But the usual story is that the people on our project do all those nasty merges on their own branches and then use the “merge” button in the Web UI when they get their PR approved. And there is in fact a fast-forward option there, but it’s not like we ever get to use it (unless we rebase) since mainline has diverged already. (I wouldn’t personally use it for “merging” (incorporating my changes) into mainline.)
This quote from the linked blog post made me raise my eyebrows though:
> In 2010…it was not yet clear that distributed version control would eventually take over, and even less clear that Git would be the dominant system.
I think it was actually extremely clear that Git would win. It had a guaranteed audience by virtue of hosting the Linux kernel. And forget even about its distributed nature; Git was already better at the centralized model than "centralized-only" version control systems ever were.
When Subversion came out I was overjoyed; finally someone had fixed most of the broken things about CVS. I jumped on it with gusto. But when Git came out it was so much better than SVN that I was blown away. And it wasn't long before there were great tools to translate between SVN and Git. By the time Github released its SVN bridge feature I think the place I was working at had already used those freely-available tools to move our old SVN repos to Git with full history. It was so easy to do! The only hard part was organizing all the developers to stop using the SVN server and switch to pushing to the Git server at the same time.
Sometimes a new technology comes out and it's immediately obvious that it's the future. The ones that come to mind for me are Git, the iPhone, and node.js.
I think you're forgetting about Mercurial, which was also created by a Linux kernel developer around the same time. It brought all the same benefits of git, but had a simpler command line API and better cross platform support. Mercurial saw wide use, especially in large corporations like Facebook.
Indeed, a lot of people will say that it was the success of github itself that pushed git over the top. In a world where bitbucket won instead of github, we could all be using mercurial.
Although I've never used it, I'm not sure how much of an improvement either of these was over BitKeeper. The primary impetus to create git and mercurial was licensing changes in BitKeeper, not technical deficiencies.
I never tried BitKeeper, so I can't speak to that. But being proprietary seemed to doom it.
It also let you put permissions on the repository itself, so if you didn't have the correct ACLs you couldn't see part of the code. It was really good for monorepos.
It has its quirks, and when I used it, could be a bit slower on the execution side, but generally thought it was really nice.
I also maintain that Mercurial & Fossil are superior to git, but git won the marketshare so its kinda moot now.
History is per-file, so (in effect) you can treat any folder as a submodule, which simplifies having an enormous multi-project monorepo. This is something I've never done much with personally, but colleagues have had good results leveraging this to look after shared code that's used by multiple projects at different revisions.
The check in/check out model is also quite easy to reason about, and works well for the non-mergeable binary files that most games developers work with. (Programmers seem to kind of like it when they have some horrid complicated thing to get to grips with, that comes with a pile of new terminology and endless ways to cause yourself increasingly painful problems. Artists, designers and production staff... not so much.)
Main issues with Perforce:
- nobody seems to work on the product any more. If it's changed at all in the past 10 years, it's changed in some part that I, user of p4v (the GUI client) and p4 (the command line client) haven't found obvious
- the command line experience is pretty terrible, as it's inconsistent, and not very well documented, and the supposedly machine-readable output mode quite often just feeds you nothing more than an array of the same strings you'd see using the normal mode. But I can't deny that you can usually eventually get it to do what you want, provided you can assume the server charset
- the offline experience is rather poor! But this is increasingly less of a problem over time, and that process will continue
Somebody please figure out how to eat Perforce's lunch. We discuss this occasionally at work, but we're too busy working on actual projects...
Literally reading it on GitHub's blog, where the whole endeavor has the name of a source control system in it.
Jokes aside, did they knew Git was going to win or did they just take on a massive risk that would otherwise gone wrong?
CVS though, uf da. We had some rough times in gamedev land until we moved over to SVN and then Perforce with proper proxies for a distributed team.
I used SVN very early in my career. I think the only good thing I can say about it is that it's easier to learn. It's quite easy to teach a junior dev how to use SVN. Git takes much longer to master.
The truth is that git is pretty abysmal overall. There are commercial offerings that easily surpass it, if you are willing to pay.
Basically, the lead engineer that was in charge of the new project set up what he liked before the rest of the team was in place. So when I was hired on the team consisted of me, a senior engineer who hadn't used subversion in years, and a bunch of junior engineers who were completely unfamiliar with it. No amount of pleading would get him to migrate to git.
It was partially a control thing, I think. He liked having full control of the repo to himself. The system architecture was also... dated.
Merging seems the same on all 3 version control systems I've used... I've heard that git branching is better(?), but haven't seen that being used anywhere really.
Yeahhhh. Svn is centralized. You must be connected to the server to do any source control work. There is no local repository, there are no local commits. Every commit is global on the server. When you make a commit, it is pushed to the server and your coworkers can fetch it. You don't make commits locally and fiddle around and then push.
Also Svn doesn't have branches per se. You just use subdirectories. It does have facilities for merging directories and managing these "branches", but it feels real weird to be switching branches with 'cd'.
It's a very different world.
A quick read: https://svnbook.red-bean.com/en/1.7/svn.tour.cycle.html
Also, this means that it's possible to do some horrifying things with branches and tags, like making a merge commit which is isolated to a single directory, or checking out a tag and making a commit to it.
Hopefully no one is actually depending on these workflows being possible, because they make project history extremely hard to follow.
That's not correct technically speaking. You can create repository on your machine - on local FS.
But of course it is more reliable to run it on server, even for yourself. If on Windows then VisualSVN is one click solution for those who just want to have that thing working.
SVN client supports equally well as "svn:" protocol as "file:". Server is not mandatory with SVN - you can work with repositories on your local HD or network share.
Your argument that this cant be done in svn because "there's a central repo" could have been translated in "git" as: "yeah you cant work on your machine without internet because you wont be able to push on github"
How are you merging without branches?
Git is mostly faster and more flexible than svn, and the merging works far better. Unless svn's merging has improved in the past decade or so, which is entirely possible.
When I switched to git from svn, the main differences were: merging was usable, making new branches and switching branches and such were _instant_ instead of many seconds, and I could work more flexibly (git doesn't require being connected to the server).
I certainly wouldn’t call SVN modern but it’s very well maintained and has never lost code on me. Many git-like features also exist now such as being able to stash some changes in order to pivot to something else for a bit. Except for the central server being a problem for some use-cases, SVN just works.
As I said, I haven't used SVN. It just seems like perforce and mercurial are basically "identical" for the ways I use them at least.
Much better working merges was reason many people moved to SVN but since then SVN just got better at it
Exactly!
[1] https://github.blog/2020-12-21-get-up-to-speed-with-partial-...
[2] https://github.blog/2020-01-17-bring-your-monorepo-down-to-s...
That's one thing I doubt Git will ever be able to do since it is a distributed model rather than server-based.
It's called Oxen and is initially targeted towards unstructured machine learning datasets, but could be good for this use case as well. Would love to get any feedback on it!
This is pretty much it, ease of use. No one really knows git (beyond 5 commands). Everyone knows how to google git commands or talks to the wizard in the company that can fix the mess someone created. While in theory git is more powerful, in the art of getting things done easily SVN wins, simple, stupid and it works.
There is also this: https://github.com/msofficesvn/msofficesvn
When you've got a ton of projects and their associated deployment pipelines all using SVN, the cost of migrating is non-zero. Someday I'll probably start (slowly) migrating, but the benefits just aren't great enough to make it a priority.
That said, SVN works, and I do think the learning issue is the primary obstacle for us moving to Git.
It should be said we're a small team though, 10 devs. I can imagine Git looking a lot more attractive to a larger team.
I had to give several talks to existing and new employees about how Git works and how to use it. I was also that #1597 guy (https://xkcd.com/1597/). Back then most hires didn't work with Git before joining us, today of course it's different. Over time, all projects moved to Git as whenever someone was working on two projects, one Git and one SVN, they would ask "why is this still on SVN?" and soon it would be on Git.
For my case: one|two developers + hundreds of read-only observers + a number of patch senders it is a perfect tool that far.
TortoiseSVN (Windows) and analogous tools (MacOS and Linux) are really unbeatable.
I am also using Git time to time but that is really far usability wise.
Five commands: commit, update, revert, merge and switch combined with FS explorer visualization are perfectly enough. Rarely: shelve(create patch) and unshelve(apply patch).
We switched a year or so ago to use git sparse checkout that was released in 2.25.
1. The trivial commit graph makes some concepts easier. You know from the commit number which is more recent. There are no complex merges.
2. The above makes for useful GUIs. There are no git GUIs that a user can not aim at their own foot, and needs the real client to clean up the mess.
3. The lack of complex operations makes access control easier. You still have to manage hooks, but it's easier or at least with less unintended consequences.
4. All clones are sparse. Together with a zero copy data storage makes for some cute concepts, such as branches and tags and directories actually being the same object. Sparse clones can be very useful.
5. The system tracks file system operations, such as moves and copies. It can actually be used for things, directly and without heuristics. (This is actually the one point where I can say I prefer the svn way. Git could have done something similar without breaking the conceptual model and it would have been useful.)
6. The metadata is, or at least used to be, more developed for non-unix file systems. I'm not sure if this is still the case.
7. Storing binary data is somewhat less bad. But still bad.
All that said, outside of specialized applications I'm not sure there's much reason to use svn for any new projects. And if you use it, keep in mind that git works perfectly well with svn archives. They just become a linear graph with funny commits and you can use that familiar git tools.
8. Naming of commands is sensible and inline with other similar tools.
9. No major issues with large files in your repo.
10. No flamewars break out online if you admit you don’t understand how part of the tool works.
1) adoption. You're early in the Adoption Curve and you're trying to grease the wheels to make it easier for people to come for you
2) modernization work. You're brought in to consult for a company because someone has declared moral bankruptcy and decided that neutral third parties are more likely to dig them out of the problem. So as a consultant you show up week one and you say, "Dear God, they're still using X?" about five times. So now you're proposing to do migrations that all of your peers finished up seven years ago.
<I am a git user, who prefers it to anything>
E.g., people always like to point out that git is decentralised and svn is centralised. Bullshit. Centralisation and decentralisation are concepts, not absolute requirements. It's similar to the whole "you can't write object oriented code in c, you need c++" argument. Nope, you totally can. And also you can totally write completely non-object oriented c++. Case in point, most people who use git these days rely on a centralised use of git, namely through github. At my last job my use of svn was completely decentralised and worked like a charm.
I think the big thing for me is that, svn vs git shares a lot of similarities to the c vs c++ scenario: svn feels more low level, in that it is super flexible through its simplicity, but relies on good conventions as a result. git, on the other hand, tries to be opinionated about how things are to be done, and provides a specialised command for each task.
git feels very much like a "take-it-or-leave-it" solution to me. svn feels more like the early linux days: if you can afford to play around a bit to set up things just how you like them, then you can end up with a pretty sweet gig, that does exactly what you want it to.
https://stackoverflow.com/questions/3640764/can-i-recover-a-...
And yes, I know they're kept in the reflog. But that is short-lived and (I believe) local rather than eternal and global like everything else in git.
You could tag, but then you are just polluting your tag namespace with old branches.
> ok but then I lose it's nice handle.
Then don't delete the handle? Maybe rename it with a `deleted/` prefix?
It's hard to imagine what the expected behaviour is when branch names are just local convenience labels.
So in the general sense, there's no reason we can't have exactly what's being discussed, but it just doesn't exist yet.
Though it only logs refs that the server itself has seen, which is more or less what I meant by "local". None of its state is shared during push/pull, it's computed entirely based upon what some individual client/server directly observes.
"Have you committed your changes to Svend yet?", "No, Svend is experiencing some downtime right now", that was some fun interactions that got us through computer science.
Git is a fun name too, but it is not nearly as funny to me.
TortoiseSVN was a great SVN client integrated into Windows File Explorer, and it looked great when you used the classic theme on Windows XP.
I've seen this happen a few times with a dev running `git push -f` with the intent to update their dev branch, except that it would force-push all branches in their clone that were associated with the remote, like master. It probably doesn't happen these days though, because the default was changed at some point to only push the current branch.
too bad they hit some limits as repos become larger and larger, tried to implement a new storage engine, and basically they never managed to iron out all bugs out of it in time, while the older storage engine entered feature freeze and was basically abandoned.
I've been checking them for years, and there were file corruption issue for so long, I lost interest in tracking the status anymore, as by that point I wrapped my head around the git model.
Nope. That took a very long while to be added. When the current crop of DVCS started appearing, one of their significant draw was actually that by necessity merges worked well. At the time, SVN made it extremely easy to fork branches, and almost impossible to merge them.
Per the official doc (https://svnbook.red-bean.com/en/1.7/svn.branchmerge.basicmer...) merge tracking was introduced in subversion 1.5, released in May 2008. That's 3 years after the initial release of Git, Mercurial, and Bazaar.
Before then you had to keep note of what you'd merged by hand so you didn't double merge it, and that was distinctly not fun.
Are you kidding? Subversion had a notoriously awful way of handling merges, which was a huge driver of people onto Git as soon as it appeared. You truly had to have been there to believe it, but in all but the simplest of merge scenarios, declaring branch bankruptcy and manually moving things back into the target branch by hand was your only real option. Early to mid 2000s, the most common team branching strategy I saw with subversion was "there's only one branch and everybody does all the development in it because god help you if you try to put it back together after branching for something".
It wasn't until well after the momentum was clearly in Git's favour and a huge chunk of the user base was gone that Subversion finally fixed it to not be complete dogshit.
> I see Subversion as being the most pointless project ever started, because the slogan for Subversion for a while was "CVS done right" or something like that and if you start with that kind of slogan, there's nowhere you can go. There is no way to do CVS right.
GitHub and others came much later, and have no affiliation with the Git project or Torvalds (some might not know this).
Torvalds created Git for the Linux Kernel folks, and didn't really care if it was used anywhere else.
Torvalds only went about creating Git because BitKeeper and the Kernel folks had a very public falling-out (much to BitKeeper's ultimate misfortune - who even knows about BitKeeper these days). He, and the Kernel folks, were very happy with BitKeeper up until then - and a lot of the BitKeeper features that were unique at the time ended up landing in Git.
This tech talk was because people outside of the Kernel became interested in a similar workflow - namely distributed and "free" branching.
Also, I can't help but marvel... this one person created not only the most prolific Kernel in existence - but also the more prolific VCS. I have a hard time just getting out of bed in the morning...
That's the only example of a well-known project I could find that's not directly related to subversion itself. I'm sure there are others, but all the other ones I could recall have since migrated (usually to git).
AFAIK for the most part Apache (the foundation) is fairly hands-off in telling people how to run their Apache project, and every project is mostly free to "do whatever".
I really think that grabbing some files from a certain commit should be a completely trivial oneliner.
Obviously, that's not easily portable to other hosts (though most of the big ones have similar URL patterns that you can discover), but depending on your use case may be a handy option.
> But it still comes with git - which I'll then have to remove for my use case.
I don't know what your use case is, or why you don't have a local history anyway of the repo so that you need to spot-download sub-trees, but if this is a somewhat common workflow this seems to indicate you may possibly be looking for something like git-archive [1]. That's a tool included in the "corners" of the git "suite" to take a `treeish` and build a tar or zip directly from it (with no git metadata inside). You can use a commit or a tag name for a `treeish`, but if you wanted it to be a specific folder inside a commit you can pull the commit, examine the tree it points to until you find the tree ID inside that representing just the subfolder you are looking for. You can pass that tree ID to git-archive. (And other things that take a `treeish`.) It's not quite a "completely trivial oneliner" to write a script to do that, but it may not be that much more complicated of a script to write.
Earlier in my career, in the first week at one company I ended up corrupting the Subversion repo. I was a nervous wreck. My boss reassured and told me about he had also corrupted a Subversion repo previously as he restored the repo from backup.
I sometimes check out a single directory from a huge repository with enormous history. Since subversion only cares about the latest commit and the directory I'm checking out, it's instantaneous.
I'd prefer just spam emails saying the system is shutting down
That's a joke right?
VSS is by far the shittiest VCS I've had the displeasure to use, though I will confess I never had to suffer through RCS and CVS.
It's certainly the only one which managed to destroy data. 'twas a good thing I'd already used other source control systems before VSS, because that experience would definitely have made me flee from source control systems for a while (much as Java did static type systems).
We switched to CVS and it was immediately better, followed by SVN a few years later. I still use git like a fancy subversion, just with multiple repositories :-)
There's some good links there that describe the trouble VSS caused.
It haunts my nightmares.
When we were migrating to git, some of the more senior engineers came up with a workflow that was described as "the best implementation of ClearCase in git that I've ever seen". It was meant as a compliment.
This is a poor excuse. I understand that MSFT/Github feels compelled to provide a convincing reason to users, but this is not it. 99.9% of problems are caused by developers making changes or pushing new code. I've been writing software for close to two decades now--if you don't touch it, it's not going to break on its own.
There's also knock-on effects, e.g. an offering like this could attract the type of user that would add a lot of additional support burden for the value that the company _and_ the user gets out of the feature.
Just kidding, but remember back in the DotCloud days when they pointed out you could run Perl? That was pretty cool. https://news.ycombinator.com/item?id=2518526
> In 2010, when GitHub introduced Subversion support, the version control landscape was very different.
That was waaaaay before Microsoft acquired it.
> But hey, if the Subversion system just works and doesn’t bother anyone, there’s no reason to make any changes, right? The reality is that there’s an ongoing maintenance cost to any software, and that goes extra for public-facing services on the internet. As the use of GitHub has evolved and the number of Subversion requests has declined dramatically, we plan to focus our efforts entirely on Git.
Reminds me of how Microsoft dumped Atom (and then fauxpen-sourced VSCode before dumping the last remnants of Atom).
I'm confused by this. Microsoft released the VS Code source in 2015, long before they acquired GitHub in 2018 and sunset Atom in 2022.
A couple points in time:
Pylance, installed by default, won't open source. Microsoft keeps calling VSCode open source. https://github.com/microsoft/pylance-release/issues/4
Same for .NET https://twitter.com/migueldeicaza/status/1537175065380495367