On Mon, Oct 24, 2016 at 10:31 PM, Carsten Haitzler <ras...@rasterman.com> wrote:
> On Fri, 21 Oct 2016 15:14:20 -0700 Cedric BAIL <cedric.b...@free.fr> said:
>
> i've been mulling this. i followed the feedback so far. basically 2 main 
> things:
>
> 1. this is intended to improve performance. especially startup times.
> 2. this is highly problematic in terms of portability and is going to create
> lots of code and build paths.

It won't create lots of code and build paths. In fact it doesn't even
need two build paths. It just needs to uses all .la files for building
quicklaunch and can be rolled in, in parallel to current system. Just
the link of the quicklaunch binary would be different. Next step would
be to make a build option that setup symlink to that binary. Finally
that option would be the default, likely only afffecting the install
process. I don't think that create a lots of code (There should be no
code change) and build paths change at all.

> 3. this makes debugging and other things a nightmare (ps names are all the
> same .. well depending on tool etc.)

This is exagerated. Again just need to pass the right command line to
ps/top and problem is solved. Can easily be documented and we can also
provide a script that does it until we provide some nicer application
there.

> 4. generally the issue of complexity in our build requires for portability 
> etc.
>
> #4 isn't something we can solve right now, but has a better solution if we go
> for a greater internal redesign. but not today. some other day. we have to 
> live
> with what we have right now.

Hum ? How ? I don't see how we can have good portability without a
complex build system. Would be interested to know more by what you
mean here !

> i am always for improvements. but this really makes this method a very very
> very hard ask to do this. i've thought about it and i think this is far TOO
> radical a change as it means different execution methods, library production,
> linking and so much more os by os. it's kind of insane though theoretically
> doable on *nix. i've checked and PIE seems to be urtterly unportable (windows
> can't do it based on my reading). the proposal would be workable ONLY if we
> could do it unversally so it wouldn't bitrot and it'd work. this is actually
> why quicklaunch did .so's instead of PIE because that WORKS portably....

Windows is anyway another platform with a lot of specificity.
Quicklaunch will never work there as there is no equivalent to fork
anyway. Emulating what PIE allow is also mostly impossible as
initialization of a library is different as what a binary require
(Even with ALSR). Anyway we already have different code path/build
differrence for Windows and Linux and this one is not a new one. As
in, it won't increase the difference much.

As for the change, they will be the same for all Unix. It is a
compilation option on just the binary plus a static linking of all efl
to it (basically an ifdef with a lot a +=). So I disagree here with
your assesment of the complexity introduced in our build system. The
main change is going to be on install which will be made by doing
symlink to that executable.

> so here is what i think is sane:
>
> 1. merge libraries aggressively. this reduces linking time BETWEEN efl libs 
> and
> thus an efl lib .so when loaded has the libs that were merged already linked
> together. i propose we try and get down to maybe 3 or 4 .so's this will close
> the gap.
>
> how do we make this portable? well on *nix we can install symlinks from our
> old .so major versions TO the new merged ones. but what on windows? the best i
> can think of for windows is produce "empty" dll's that ONLY contain like a
> dummy function and the correct linking to other efl libs they depend on eg if
> we merged eina, eo, ecore, efl into "efl" then eina depends on efl, eo, depend
> on efl and ecore depends on efl. thus link any one of these and you got your
> symbols from before plus more. this solution ALSO works on *nix ... so we 
> could
> use it as a start with symlinks being an optimization of it. yes it means 2
> install paths unfortunately. we COULD do it as a post-install that "rm's"
> the .so's we installed and replaces them by symlinks which makes this kind of
> sane to keep around.

Wouldn't that not work due to DSO ? No idea if that would work with
Windows. Also, I am not to sure it would improve things that much as
you still need to load a library, agreed an empty one, but still need
to load one. It will also be a lot more work than my proposed change
as it require to shuffle all the code around and create a set of new
empty libraries.

> 2. move quicklaunch further down to core (efl core) so its not only up in elm
> land. this would make it a core capability. we STILL should load .so's/dylibs
> or dll's if there, and try PIE binaries... but we should work here on windows
> too. make it a core feature low down the stack

We are already doing PIE binary. As stated above Windows can never
have quicklaunch in any form (No fork, and library vs binary can't be
initialized in the same way).

Also what do you mean by further down in the stack ? I like it in
elementary as it enable us to later optimize loading of profile/theme
which wouldn't be possible in the lower level.

> 3. use quicklaunch mode for e. since efl will be there then this will work.
> this does not MEAN we have to use it for all apps nor does it mean we MUST use
> it for e... but this would help

That is what I want to avoid. Having a random path where we may have
it for some application for some user on some platform. I really would
like this to either be used by a large portion of the user base or not
bother. In my opinion 3. doesn't change at all from current situation
as in dead code lying around.

Also if we start to enable quicklaunch in enlightenment, due to the
way enlightenment_start monitor enlightenment, this means we have to
seriously change the way enlightenment_start work. So either
enlightenment always rely on quicklaunch or it never rely on it,
because the alternative of it relying maybe on it, is a receipe for
duplicated code that bit rot in my opinion. Enabling quicklaunch in
enlightenment means moving process monitoring to quicklaunch and
adding the ability to start a binary in case of a crash. Btw that
means that we can provide the same backtrace feature we do provide
with enlightenment for all efl application started by quicklaunch.
This would improve debugging users issues quite a lot, something we
can't do currently.

> these above should get almost all the benefit of the PIE thing with the least
> of the downsides. we still have ps name issues though. :( we need to dig more
> to try our best to make this "ok" but this means we still work normally. as
> long as the "quicklaunch" binary uses very few efl symbols, loading efl libs
> and linking will be a much lower cost as we do less intra-lib linking and
> minimal app <-> lib linking. in fact we could make a single libefl.so as a
> build option if symlinks and dependency .so's as above work. this should be
> almost the same cost as the pie binary proposal but is portable.

I have absolutely no idea what you mean here. The point of quicklaunch
is to load efl and force a resolution of all symbol once (this reduce
future memory usage and runtime cost), you would even start it by
enforcing the linker to resolve all symbol. I am confused !
-- 
Cedric BAIL

------------------------------------------------------------------------------
The Command Line: Reinvented for Modern Developers
Did the resurgence of CLI tooling catch you by surprise?
Reconnect with the command line and become more productive. 
Learn the new .NET and ASP.NET CLI. Get your free copy!
http://sdm.link/telerik
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to