It’s just that certain languages, like Python, seem confused or unable to maintain the simplicity.
network programming is hard. really hard. Saying that async magically removes all that complexity is false. The complexity is moved into the executor, if the executor is out of your control you are up shit creek.
Finally If languages like python can't do it well that says something...
Do a search for "psycopg2 decryption failed or bad record mac" for example. Or replace psycopg2 with celery, or gunicorn. Python has a difficult history of half-way attempts to parallelize, a half dozen eventlet libraries that never made it to the standard, and only recently - in terms of library support - is an official coroutine implementation available, albeit not as widely used as it needs to be. Library support is still widely lacking.
It's not that Python can't do it well, it's that the ecosystem has dug themselves a pit by doing things that aren't legal Rust and would be frowned upon in other languages. Those hacks to support parallelism and greenlets, gevent, etc. rely upon juggling file descriptors and carefully tweaking global state in each library. It's gnarly stuff and results in errors that are clearly the result of failing to catch all the balls correctly.
Those SSL errors, by the way, are incredibly concerning. It means that wires are getting crossed and if it weren't for SSL authenticating the packets, the wrong data would happily get sent or received to the wrong party. In a network server, yikes.
However I would be interested in hearing what the specific Rust features (or lack thereof) that prevent this being possible. If it's possible to swap the async runtime out it seems like it should also be possible to add enough runtime to a Rust program to allow the equivalent of virtual threads as long as stuff uses stdlib sockets, file I/O etc.
Rust used to have virtual threads pre-1.0, but they were removed since the overhead was deemed unacceptable.