[ANNOUNCE] Tengine-1.4.0

Maxim Dounin mdounin at mdounin.ru
Thu Sep 6 10:34:24 UTC 2012


On Thu, Sep 06, 2012 at 12:10:46AM -0700, Michael Shadle wrote:

> the basic concept of "modules" are pluggable instruments to extend
> something else.
> having to compile it in makes it less modular. DSO support would make
> package management in distributions seamless.
> minor differences in any one single module means you need to recompile
> the entire binary for that small change instead of a single .so for
> example being changed and the server gracefully reloading.

The main problem with dynamically loaded modules is ABI, and 
that's why we don't support it now.  With even minor difference in 
nginx core you'll need to recompile all modules - else you'll see 
unexpected behaviour here and there due to ABI changes.

Moreover, right now we don't maintain ABI even within single 
source code base - various structure layout may change depending 
on various configure options and test results.  That is, if one 
needs to compile loadable modules - the only valid option now is 
to compile them with nginx itself, else expect problems.

With this in mind it doesn't really make sense to support dynamic 
modules.  Especially if you also consider resulting performance 
loss (and nginx's seamless upgrade process as mentioned by Reinis).

So the question isn't really about dynamic modules by itself. 
Question is about (at least tracking of) ABI provided for modules. 
For now it's something mostly nonexistent.

Not even talking about resulting problems due to use of other 
libraries n loaded modules.  I've seen Apache segfaulting due to 
incompatible libraries used in modules more than once, and I don't 
really want to see the same with nginx.

Maxim Dounin

More information about the nginx mailing list