<div dir="ltr"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">But if you wanted to, you<br>could pass --enable-plugins=X,Y,Z or something and end up with a<br>smaller binary.</blockquote><div>I like that. It put's the optimization in the hands of the builder which</div><div>seems more than fair to have integrator's figure out what goes in</div><div>or out & dependency chains. It also will sit better in build systems</div><div>like Yocto IMO since you are only building installing what is</div><div>needed during make. </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 18, 2019 at 9:31 AM Aleksander Morgado <<a href="mailto:aleksander@aleksander.es">aleksander@aleksander.es</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hey Dan!<br>
<br>
> > > > Is there any benefit in keeping per-vendor plugins installed as<br>
> > > > separate .so files and loaded during runtime?<br>
> > ><br>
> > > I think it'd be a shame to lose this architecture. On embedded<br>
> > > systems saving resources is always desirable and I remove<br>
> > > all vendor plugins that do not apply to an embedded hardware<br>
> > > footprint. The most common complaints that get raised to me to<br>
> > > avoid use MM for embedded systems is footprint. I'd hate to give<br>
> > > reasons to communities like OpenWRT to make a point out of that.<br>
> > ><br>
> > > > Thinking of installed size, I believe we may end up duplicating a<br>
> > > > lot<br>
> > > > of code when plugins share common code, as the utils libraries<br>
> > > > are not<br>
> > > > installed, they get incorporated in the plugins themselves. This<br>
> > > > also<br>
> > > > makes some unexpected runtime errors if a plugin tries to<br>
> > > > register a<br>
> > > > type that some other plugin has already registered (just had this<br>
> > > > one<br>
> > > > today with the new Foxconn plugin in git master, which shares<br>
> > > > code<br>
> > > > with the Dell plugin).<br>
> > ><br>
> > > Respectfully this just seems like poor plugin design. Why should it<br>
> > > be okay to create dependencies between plugins. Shouldn't shared<br>
> > > logic be in a share location if it really is common code? And if<br>
> > > it's<br>
> > > shared but not applicable to all then maybe it should just be<br>
> > > copied.<br>
> > ><br>
> ><br>
> > You're right, that was indeed poor plugin design. Up until now we<br>
> > were<br>
> > "copying" as you said, but that would break the GType system when<br>
> > multiple plugins tried to create objects of the same type. I've tried<br>
> > to fix the plugin design my creating a new set of installed modules<br>
> > that provide the shared utils to the plugins, please see:<br>
> ><br>
> > <a href="https://gitlab.freedesktop.org/mobile-broadband/ModemManager/merge_requests/209" rel="noreferrer" target="_blank">https://gitlab.freedesktop.org/mobile-broadband/ModemManager/merge_requests/209</a><br>
> ><br>
> > Due to the copy no longer being done, the overall size of all .so<br>
> > files installed in /usr/lib/ModemManager went from 7MB to 5.5MB in my<br>
> > machine, even with the new shared modules installed. Comments<br>
> > welcome!<br>
> ><br>
> > > > I would bet there isn't any as we truly haven't kept a stable<br>
> > > > plugin<br>
> > > > API like never ever.<br>
> > ><br>
> > > Ya but industrial users, for the worst, often tend to get a certain<br>
> > > version and stick with it. The API changing in that case doesn't<br>
> > > matter.<br>
> > > With 5G on the door step there may be some new vendors that want to<br>
> > > have a proprietary plugin while they think their new API is god's<br>
> > > gift<br>
> > > to humanity, cough cough hint hint. I love the GPL but losing the<br>
> > > plugin<br>
> > > framework feels bad as someone who's had to deal with the bidding's<br>
> > > of mega-corp's and legal team's choices bases on lawyer bro's<br>
> > > understanding of software.<br>
> > ><br>
> ><br>
> > As long as they don't update the ModemManager version, that would<br>
> > work. But note that not even stable MM updates (e.g. 1.10.0->1.10.2)<br>
> > the plugin API is maintained. Of course, if they are the ones<br>
> > building<br>
> > MM as well, that's a different story, but then I wouldn't call that<br>
> > an<br>
> > external plugin, it really would be a totally different MM in my<br>
> > opinion. The fact that it's developed as a plugin doesn't make it a<br>
> > "proper plugin" if you know what I mean.<br>
><br>
> Another option to address Matthew's concern would be compile-time<br>
> selectable plugins. We would still keep the general plugin architecture<br>
> (eg the concept of separate/encapsulated code modules for each type of<br>
> hardware) since I think that's a good thing to do from a software<br>
> engineering and architecture point of view. But if you wanted to, you<br>
> could pass --enable-plugins=X,Y,Z or something and end up with a<br>
> smaller binary.<br>
><br>
<br>
That's definitely something we could have, yes. Actually, I recall a<br>
patch doing that from Gimp's mitch, but that got lost in some old<br>
Lanedo git repo.<br>
<br>
As long as the plugins hierarchy is enforced by the build system (e.g.<br>
see this commit for the dependencies between them:<br>
<a href="https://gitlab.freedesktop.org/mobile-broadband/ModemManager/merge_requests/209/diffs?commit_id=93123d7665da1bd6b6765dfe92a71f2ff125d41f" rel="noreferrer" target="_blank">https://gitlab.freedesktop.org/mobile-broadband/ModemManager/merge_requests/209/diffs?commit_id=93123d7665da1bd6b6765dfe92a71f2ff125d41f</a>)<br>
we should be able to have selectable plugins during configure, which<br>
is definitely a much saner thing to do than cherry-picking which<br>
plugins are installed during the install phase.<br>
<br>
-- <br>
Aleksander<br>
<a href="https://aleksander.es" rel="noreferrer" target="_blank">https://aleksander.es</a><br>
</blockquote></div>