Helix is now my main editor (spoiler alert)

It finally happened lads, I’m switching away from Visual Studio Code

What made me decide to do this?

I think I’m finally done with the direction Microsoft is pushing with vscode. No, not the AI direction, as I imagine a lot of you were probably thinking. Rather, it feels like vscode is slowly moving to be less and less open.

Recently, I came across someone on YouTube talking about how Microsoft has stopped the C/C++ vscode extension from being used in vscode forks, such as Cursor. (I don’t like cursor by the way, but the precedent this sets is terrible).

The video argued that Microsoft is just trying to protect themselves from bug reports on developer platforms they don’t support, but I believe that the type of blockage this supports is antithetical to vscode’s previously open nature. Sure, vscode itself is not open source, rather it has an open source core, but the idea is that most of the features in vscode are open source. I think Microsoft is slowly moving away from that ideal, now that they have captured a large swath of the developer market. I don’t think that paid features are on the horizon, but they are definitely trying to lock in developers in whatever way they can.

It’s also fun to learn new things, and there are a lot of cool vscode competitors coming out lately.

So, what are my alternatives?

Zed Editor - https://zed.dev/

“The editor for what’s next”, as it’s described on the website. Zed is written in rust (a huge plus in my book!), and is super performant. I’ve tried Zed in the past, and while there are many things that need to happen for it to directly compete with vscode, it’s the closest to being a direct competitor, so props to their team for that.

What are the problems with Zed then? Really, not much. I’d say there are three main (and significant for me, but might not be for you) reasons why I can’t use Zed. In the spirit of clickbait (or read bait? idk), the last one is the most important to me.

1. Zed is very pushy about AI

Unlike a lot of the Linux community, I don’t mind AI that much. I’ll admit, I use ChatGPT at work to generate C# boilerplate all the time. It speeds me up immensely, and for boilerplate, it’s basically always correct, unlike when you use it for anything more complicated. AI is a tool, analogous to something like autocomplete. When put in the right hands, it can do amazing things, more often than not though we see it put in the wrong hands, who think that fancy autocomplete will make them the next Bill Gates.

The problem with Zed is that AI is at the forefront. I can’t trust any entity that puts AI at the forefront of their software. I’ve been burned too much by tech bros insisting that their rug pull or scam operation powered by AI is the next big thing. Zed wants to position itself for the future where AI will almost certainly be integrated into everything we do, and that’s fine. It’s just not for me. It’s for people who rely on AI a little more than I do at this point and time.

2. Zed does not support Windows

Unfortunately, for work I have to use Windows. We use C# and are very entrenched in the Microsoft ecosystem. VERY entrenched. Zed as of now does not support Windows, and any editor I switch to must be cross platform for Windows and Linux.

3. Zed can be close sourced in future releases

Just for the record, there are no plans for Zed to go close sourced. As far as I know, there has never been such a discussion. So you might be asking, “Zed’s licensed under the AGPL, GPL, and Apache licenses. How would they be able to close source it?”. Let me introduce you to what should be an open source developer’s worst nightmare: The CLA.

Zed’s CLA can be found here: https://zed.dev/cla, and unless they’ve changed it significantly, this section still exists:

2. Grant of Copyright License. Subject to the terms and conditions of this Agreement, You hereby grant to Company, and to recipients of software distributed by Company related hereto, a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute, Your Contributions and such derivative works (the “Contributor License Grant”). Further, to the extent that You participate in any livestream or other collaborative feedback generating session offered by Company, you hereby consent to use of any content shared by you in connection therewith in accordance with the foregoing Contributor License Grant.

This, even without the potential of close sourcing, is fishy, but it gets worse when you realize that the GPL family of licenses is meant for other people using code you own:

[1] Quoting this part of the GPL FAQ https://www.gnu.org/licenses/gpl-faq.en.html#ReleaseUnderGPLAndNF :

I would like to release a program I wrote under the GNU GPL, but I would like to use the same code in nonfree programs. (#ReleaseUnderGPLAndNF)
To release a nonfree program is always ethically tainted, but legally there is no obstacle to your doing this. If you are the copyright holder for the code, you can release it under various different non-exclusive licenses at various times.

[2] And this part of the GPL FAQ https://www.gnu.org/licenses/gpl-faq.en.html#DeveloperViolate :

Is the developer of a GPL-covered program bound by the GPL? Could the developer's actions ever be a violation of the GPL? (#DeveloperViolate)
Strictly speaking, the GPL is a license from the developer for others to use, distribute and change the program. The developer itself is not bound by it, so no matter what the developer does, this is not a “violation” of the GPL.

However, if the developer does something that would violate the GPL if done by someone else, the developer will surely lose moral standing in the community.

We learn that not only can Zed Industries use the GPL licensed code in nonfree programs, under a different license [1], but also they are not bound by the terms of the GPL, since they are the sole copyright holder for Zed’s codebase. Thankfully, they will most certainly “lose moral standing in the community”.

The silver lining here, is that they can only relicense new code under a different license. See [3]:

[3] https://www.gnu.org/licenses/gpl-faq.en.html#CanDeveloperThirdParty

Can the developer of a program who distributed it under the GPL later license it to another party for exclusive use? (#CanDeveloperThirdParty)
No, because the public already has the right to use the program under the GPL, and this right cannot be withdrawn.

Thus, Zed may close source the program in the future, leaving the older open sourced version out to dry. I cannot support an editor that has the potential to be nonfree in the future, hell, that’s why I’m leaving vscode in the first place.

Lapce Editor https://lap.dev/lapce/

The Lapce editor is also written in rust, and uses their own UI library called Floem. It supports Windows, MacOS, and Linux, and it’s main focus is actually on remote development.

What are the cons of using this editor?

1. Lack of maturity

Currently, Lapce is heavily in development. So was Zed, but this one is more so. It supports a few extensions, and themes, but nothing more. It has a lot of the features vscode has, but is still missing enough to where you begin to feel less productive. That’s not typically a problem, but because the UI looks so much like vscode, I’ve grown to expect some of the features that Lapce lacks.

2. It’s weird looking

Now, this is subjective, but Lapce has these weird solid black outlines that makes it look like a cartoon program.

Lapce editor user interface

I can’t take the editor seriously while the UI looks goofy like this. Otherwise, it looks fine.

Honorable mentions

Micro

I tried this editor for a while, since I didn’t think I could handle a modal text editor, but I found it lacking many features I wanted in a code editor: chiefly among them a good, tree-based file browser.

Vim (or even Neovim)

No. Sorry. I have a high need to keep everything as default as possible, without much configuring. The most I’d like to configure is a color theme, but I’d like my functionality to always be there regardless of which vim I’m using on which computer. I don’t want to sit there for 10 minutes figuring out how to download my dotfiles or whatever the cool hacker{men|women|theys} do.

Also, if I can help it, I’d like a program written in rust or some other memory safe language, because I’m a rust nerd.

Kakoune

I’ve heard good things about this editor, but helix is better in just about every way for me.

And finally, Helix https://helix-editor.com/

Helix editor screenshot

Don’t get me wrong, there are plenty of quirks with Helix, but it’s by far the best option for me personally.

  • It’s cross platform
  • It handles language servers how I’d expect
  • It has a tree-based file browser (as of this PR)
  • It has a bunch of color themes built-in (I settled on the GitHub Dark theme, because I’ve used it in vscode before)
  • I can use it over ssh for my remote PCs

I do have a couple of items on my wishlist already:

These things aren’t preventing me from using Helix, but they are hampering my workflow significantly.

The integrated terminal is the easiest one to work around, I just make a new tab in my terminal emulator, but that doesn’t work for things such as ssh. I’d have to open a whole new ssh session OR close Helix every time I wanted to for example run a program I’m working on.

When it comes to adding features to Helix, there is always push back. For example it took over 3 years and several implementations to get a tree-based file browser A lot of people on the issue discussions will say “Oh I use so and so other program, therefore just use that”. What they often fail to realize is that not everyone is using a platform that supports said program, or not everyone wants to download a whole other program to perform an action that is common in code editing situations.

Another thing people will say for Helix is that “this shouldn’t be a part of core, but would make a good plugin”. I think a lot of people use Helix, specifically because it’s “batteries included”. Also, comments like that read to me like “the thing important to you doesn’t affect me personally, so it shouldn’t be in the program, but things I think are important probably should”.

Helix is a great little editor, and I think it’s good for my use cases for the time being. And it feels good to use software that is and will always be developed in the open.

That’s all for now