Why aren’t the directories and files of the standard Elixir system sticky in the code server?

Why aren’t the directories and files of the standard Elixir system sticky in the code server? All the ones which are part of the standard Erlang release are sticky.

I am running Elixir 1.19.1

(When files/directories are “sticky” in the code server it means that the code server will not reload/unload them unless they are unstuck. This makes it a bit more difficult to modify the system by mistake.)

This question got me interested in understanding the tradeoffs better. Documenting what I discovered here for future reference:

Relevant Erlang docs: code — OTP 29.0.4 (kernel 11.0.3)

I asked around and got an answer from José Valim:

  1. Basically any time I want to recompile a module it will fail now. Be it for debugging, coverage, pry, etc. and we aren’t really gaining much back. You can still override a Plug, Phoenix or Ecto module and crash your app all the same
  2. Plus we warn on module conflicts anyway

This made me wonder about how Erlang approaches this:

You mentioned it making it a bit more difficult to make mistakes. Is that the primary reason for the stickiness in Erlang?

Do Erlang tools run into friction with sticky directories when instrumenting code, or do they just unstick directories on the fly? I see there’s unstick_dir/1 code — OTP 29.0.4 (kernel 11.0.3).

I’d assume this is not related to security either, since any sticky dir can be unsticked in runtime anyway, right?