> Am 12.05.2022 um 15:41 schrieb Simon Studer <simon.stu...@netnea.com>:
> 
> Hi Stefan,
> 
> Thank you for the quick and extensive feedback!
> 
> To be honest, I was not expecting there to be so many good reasons not to use 
> Rust but I think I see your point that it would be difficult to maintain and 
> that compatibility would absolutely be a concern.
> 
> From what I gather most of the problems arise the moment you add the 
> abstractions and if you do not add such abstractions there is not much reason 
> to use Rust in the first place.
> 
> Golang had been cheered for when I first asked the question. Do you know by 
> any chance if there would be similar issues with Golang? If not, I might give 
> that a shot instead.

A good article about (against, actually) about Go and its shortcomings: 
https://fasterthanli.me/articles/lies-we-tell-ourselves-to-keep-using-golang

Kind Regards,
Stefan

> 
> Best,
> Simon
> 
> 
> 
> On 5/12/22 12:13, Stefan Eissing wrote:
>> Hi Simon,
>> 
>>> Am 12.05.2022 um 11:28 schrieb Simon Studer <simon.stu...@netnea.com>:
>>> 
>>> Hi everyone,
>>> 
>>> When I read about Apache's use of rustls I thought of this thread again.
>>> 
>>> For mod_tls, the module itself was written in C linking to the rustls-ffi. 
>>> I have been wondering if it would be desirable to implement the modules 
>>> themselves in Rust as well and how you would go about doing that. This is 
>>> something I have superficially looked into in the past but never really 
>>> followed through with.
>>> 
>>> I looked around and found https://github.com/majorz/apache2-rs which has 
>>> been inactive since about 7 years ago. There are also a number of forks 
>>> which are more recent but also appear to be inactive and left in an early 
>>> development state. There appears to be one fork that has only just been 
>>> worked on recently with minor tweaks but it is still the same for the most 
>>> part.
>> 
>> When I started the work on mod_tls, I was pointed to that abandoned project 
>> as well. The main issue I see in this approach is that one does "duplicate" 
>> Apache APIs and those duplications do not follow any updates/improvements 
>> that the server will do over time. This may lead to various breakages, even 
>> when the API is extended in a C-backward compatible way. This happens quite 
>> often in the 2.4.x release line.
>> 
>> Examples of that:
>> - Adding an enum: if a new HTTP status comes up, the sever adds a definition 
>> to its enums, but the "pub enum Status {...}" (as defined in 
>> https://github.com/majorz/apache2-rs/blob/master/src/httpd.rs) would not 
>> follow. The Rust language runtime will panic() if it encounters an enum not 
>> properly defined.
>> – the wrappers in 
>> https://github.com/majorz/apache2-rs/blob/master/src/ffi.rs do not follow 
>> either and will not account for added fields. Adding fields happens 
>> regularly. The "wrong" size will most likely be problematic in the 
>> Copy/Clone traits
>> 
>> To control that, all these definitions would best be done as part of the 
>> Apache httpd project. That would require a serious build-up of Rust 
>> competence among the core developers. It is doubtful, if the existing team 
>> is interested in that. Of course, Rust people who want to make a long-term 
>> commitment in the project would not be turned away. But so far, I do not see 
>> any.
>> 
>> Beyond the pure writing code stuff, the target platforms would need to be 
>> managed. Apache runs on architectures which are not supported by Rust.
>> 
>> Also, feedback from linux distributions I got (those may not be 
>> representative) is that they are hesitant to include more Rust components. I 
>> have heard of none that has picked up mod_tls in their package distribution. 
>> That hesitation seems mainly to stem from the fact that Rust regularly 
>> re-invents itself and requires everything to update to the current state of 
>> languages and crates. Those are mostly in 0.x.x versions and APIs do change 
>> regularly.
>> 
>> This means that updating a Firefox requires a Rust updated which requires an 
>> update of crates which then might mean other Rust packages will no longer 
>> compile and one has to update them too, if indeed such an update for the 
>> Firefox Rust version is available. etc. etc. This conflicts with any LTS 
>> distribution model.
>> 
>> tl;dr
>> 
>> The update/backward compatibility/dependency handling of Rust and the *nix 
>> world where Apache contributes too are different in vital aspects. This 
>> makes delivery of Rust based modules there difficult. If you do a module 
>> just for your own/organization, this might be fine.
>> 
>> 
>>> Recently, I have started to implement something similar, mostly to get some 
>>> familiarity with the process of using Rust's bindgen tools. The approach I 
>>> chose is somewhat different as I generate the FFI with bindgen on the fly 
>>> during the build process. The project is located here: 
>>> https://github.com/studersi/apache-rs. I have not implemented any 
>>> abstractions yet that are more idiomatic to Rust and stuck to the FFI 
>>> generated by bindgen for now. I will likely add such abstractions later to 
>>> get the most out of Rust's safety guarantees.
>>> 
>>> Is anyone else looking into this or maybe even the owner of one of the 
>>> other projects? Any other thoughts or comments are welcome as well :-)
>> Rust is an excellent language. The weakness I see is that no one commits to 
>> any long-term stability. If you use Rust, you must account for language and 
>> crate changes which will force you to upgrade at any time. If a crate fixes 
>> a CVE, it means you have to re-build your Rust component using the recent 
>> versions of everything.
>> 
>> 
>> I hope this explains a bit the reasons behind writing mod_tls in C and 
>> linking Rust from a (sadly static) library.
>> 
>> Kind Regards,
>> Stefan
>> 
>>> Best,
>>> Simon
>>> 
>>> 
>>> 
>>> 
>>> On 8/21/20 01:00, Wendell Hatcher wrote:
>>>> Golang!! 😊😊😊
>>>> 
>>>> Wendell
>>>> 
>>>>> On Aug 20, 2020, at 6:58 PM, Nick Kew <n...@apache.org> wrote:
>>>>> 
>>>>> ο»ΏOn Thu, 20 Aug 2020 21:59:50 +0200
>>>>> Simon Studer <simon.stu...@netnea.com> wrote:
>>>>> 
>>>>>> Hi everyone,
>>>>>> 
>>>>>> Recently, I was wondering which programming language should be used
>>>>>> for new Apache httpd modules.
>>>>> Whatever suits the module's developer and task.
>>>>> 
>>>>> The C API has a stability promise: if you use it, your
>>>>> module will continue to work with (at least) future 2.4.x
>>>>> releases.  That give you C or any language with C linkage.
>>>>> If you deviate from the API, you're on your own.
>>>>> 
>>>>> Alternatives that (broadly speaking) wrap the C API are also
>>>>> possible: see for example mod_perl and mod_lua.
>>>>> 
>>>>> -- 
>>>>> Nick Kew
> 

Reply via email to