Fortunately tools to fix this issue on Linux exist, like Bubblewrap and Dbus-Proxy, but they require custom configuration per software, so almost no distro uses them directly, but we do have Flatpak that basically uses both of these tools under the hood, unfortunately, it also has its own "limitations", like the amount of packages and some weird behavior in some packages.
I'm trying to solve this issue by using both of these tools with NixOS [1], where I can choose how much security I want for each package, like limiting the files that they can access and/or the entire dbus (practically simulating Flatpak). I mostly use it on proprietary software, like Games, as they have a history with RCEs...
In the end, security is a tradeoff with convenience.
As it usually goes in programming, "it depends on your objectives", there are things that are easier accomplished with the ErlangVM than Rust. Also, if you want a language that uses the ErlangVM and has static types, maybe you should take a look at Glean[1].
In my case I prefer to work with Elixir because of the community, as I find easier to work professionally with Elixir than some other mainstream languages, as mostly projects follows the same good practices, use the same tools and have good documentation.
Elixir has tradeoffs that many languages refuse to do, like green-threads (from Erlang), that enables you to do many cool things with the concurrency / parallelism / distributed computing bits (and there is a whole ecosystem around these tradeoffs).
But the selling point of Elixir for me is the quality of life for the dev, the docs and tooling are amazing, the community is very focused, the language itself is easy to read and extend (with the powerful macro system) and the pattern match system, is one of those things I wish every language had.
I love nix, I've been using it for the last 2 years, I have a very stable setup from these 2 years of effort [0], and I just can't recommend Nix for Linux beginners, why?
It's not because of the nix language, It's not because of the CLI, it's because everything is scattered, you have to consult many places to find out how to do things with Nix, here is an example:
Usually, when I need a new complex program, like Steam, I first check the system-wide configuration [1], the wiki [2] and the package list [3], if I just want it on my user, I need to check if Home Manager has an option [4], if it doesn't, I can try using the "home.packages" option. Now, if I need to override something on the package, I need to remember how to do it with [5] [6] (while checking the source code for the package in parallel to find the options).
And then sometimes, on very rare occasions, I need to fine tune something with the nix language, so I need to check the builtins/lib docs [7], but some builtins are not there, so I need to either use nix-doc [8] or find the docs inside the code-bases [9] [10] (they are split between both repos)
For me, this is one of the main pain points of using Nix / NixOS that needs to be solved.
Yea, only time will tell, but one thing that I love about Elixir is it community, that try to support and improve the "big projects" instead of remaking, eg:
- Phoenix for web dev
- Nerves for IoT / Embedded systems
- Membrane for multimedia / streaming
Hopefully Nx and Axon will be in this list soon :)
> Also (surprise) shell Linux knowledge almost doesn't scale to the debugging GPU drivers, DE and X server issues.
You will be surprised on how much Wayland solved those issues. At least, in my experience, understanding why Sway crashed is a debug flag away. Unfortunately, Wayland is a double edge sword, even more if you want to run games with multiple monitors (but that is a pain even on Windows in my experience).
That makes me think, doctors and lawyers have intensive training to minimize risk for other persons, each day our field has more impact on other's life, I wonder if we are heading to something similar...
I'm building a open source Raylib's binding for Elixir, to be the base of 2D/3D games in elixir (yes, I know that elixir is not the best language for that, but its something that would be cool to do with Erlang's VM regardless)
The project's architecture is already ready to use, it just needs more functions implemented from Raylib and I need to figure out how to make it work on MacOS (see issue #7)
For those that are whiling to learn vim, I recommend to not install a lot of plugins when you are still learning, you will probably just forget them and it will probably have side effects on your configuration!
But as basic plugins that will provide a great quality of life, I shall recommend those:
The ideal solution is to use modules/classes and parameters names to contextualize, eg:
Windows.find_kit_root(key)
And is even better if your language supports pattern match on the parameters like elixir, so you can "overload" the function with many types of arguments, eg:
Windows.find_kit_root(%User{key: key})
Windows.find_kit_root(%Admin{key: key})
Providing different behaviors to the same function name
I would consider it was a interesting flag if I was an investor.
Many startups choose languages because of the benefices that they have, I cant see discord as it is nowadays without Elixir for example.
But obviously, some startups choose because its cool, this ones you shall avoid.
Well, mostly of the language specific plugins are language server protocols (LSP), you only need a client to make they work on any editor, I used to use CoC on vim to have that power, but now with the new version of NeoVim the client is build-in, so...
[1] - https://github.com/Draneria/Metallics-by-Draneria_Krita-Brus...
[2] - https://krita-artists.org/t/memileo-impasto-brushes/92952/11...