Wednesday, 7 March 2012

Re: [evaluation] python bindings to netsurf for pyjamas-desktop

folks, hi,

thank you for the input on the IRC channel yesterday. i didn't see an
ibot logger so i thought i'd write a summary here of what i managed to
establish, for the archives so that anyone who may be interested can
refer to this in future. i will cross-reference it for the benefit of
the pyjamas community for example.

i am so sorry, i forgot who you were, i have closed the irc window,
but didn't get a chance to ask your name, but:

* thank you to the person i spoke with yesterday, who described the
thoughts and plans of the netsurf team regarding DOM [until you were
distracted by other conversations and were unable to answer]

* the roadmap involves developing and completing libdom first

* followed by adding in dynamic and automatic update (on-screen redraw
after a libdom function is called)

* _then_ things like language bindings can be added.

* the language bindings themselves technically have been mulled over
and as i understand it you have been thinking of implementing them in
one of two ways:

a) a code auto-generator which will generate a one-for-one
function/property mapping from language X to DOM function/property X.
b) a dynamic runtime "middleware" jobbie which uses a binary
encoding (type library) to represent the DOM's functions/properties.

* i mentioned the pros and cons of each of a) and b).

a) will easily turn a 400k netsurf executable into a 5400k netsurf
executable due to the overwhelming size of the HTML5 / DOM
specification: 350 DOM objects, 2,000 functions within those objects
and over 20,000 properties in those objects.

b) will be slightly slower, requiring a runtime overhead to decode
the "type library" but the code size will be massively reduced.

(observation: potentially, the reduction in code size could well
result in increased speed on slower CPUs especially embedded low-end
processors with smaller or zero sized caches. bottom line: it's not
clear-cut!)

* i mentioned a few technologies which implement each of a) and b)

a.i) webkit implements techique a) in.... abundance :) its compiler
is written in perl. a significant amount of infrastructure has to
surround the code with webkit's compiler generates: this code is *not*
automated. it is entirely hand-written [about 7,000 to 15,000 lines
of hand-written support code is required per language binding]
a.ii) pythonwebkit provides a cleaner easier-to-understand compiler
which does the same job as webkit's perl-based compiler. it still
generates a file which i believe is somewhere around 50,000 lines,
just the one file, maybe more, to cover the python-DOM bindings. the
additional hand-crafted "support" code is *still* required.

b.i) COM. it gets a bad rep, but it's just... staggeringly
powerful. sufficiently powerful that people badly underestimate it -
mostly because it was written and deployed by microsoft. after nearly
2 decades, someone has *finally* implemented COM for unix / linux -
it's called tangramCOM.
b.ii) XPCOM. xpcom was "inspired" by COM. it's almost the same...
except they didn't understand why coclasses have to be implemented.
the firefox team have got themselves into some rather awkward
technical situations as a result of this very subtle lack of knowledge
of the importance of having _really_ good middleware.
b.iii) GObject with Introspection. this one is interesting, because
it turns out that gobject-introspection now has *multiple* language
support... including *two* separate javascript bindings! in other
words if you were to adopt gobject as the netsurf middleware, should
you choose this route, you'd *automatically* get javascript
bindings... *for free*... as well as several other programming
languages.

this is why middleware is so powerful - as you no doubt, as free
software programming experts, already know. but please bear with me:
i am writing to a wider audience with the above, so for *their*
benefit it has to be spelled out.

anyway: each of the various techniques has their pros and cons: i
would greatly appreciate hearing based on your technical expertise and
knowledge, and working in the spirit of free software and following
the principles so ingrained in the most respected Apache Software
Foundation's Charter of "mutual respect for all contributions", your
views on the above and also adding to my own knowledge by describing
some alternative techniques which you may be aware of and i may not,
ultimately for the benefit of free software advancement and not to the
advancement of our own personal egos.

btw i mention that last paragraph because i heard that someone was
talking on IRC back-channels which caused a friend of mine to phone me
up in extreme embarrassment that he had even mentioned netsurf to me.

whoever you are, i do not know and i do not need to know - i
apologise to both you and to my friend, that i caused you to believe
it to be necessary to criticise me to other people. i operate on the
basis that all are welcome to contribute to the advancement of free
software, and on the assumption that because i personally welcome
anyone being better informed than i about technical matters, that
others will reciprocate and do the same for me - to correct anything
that i got wrong, and to teach _me_.

i can only apologise - deeply - for having somehow offended you in
such a way that i do not fully comphrehend.

in particular, i deeply apologise for having triggered some hatred
within you, the expression of which, to your peers in public forums,
will only harm yourself as well as free software.

may i respectfully therefore suggest - without prejudice and without
"ORDERING" or "TELLING" or "COMMANDING" you in any way shape form or
manner - that you CONSIDER, that if you have a problem for goodness
sake _talk_ to me. talk to _me_. i'm not going to bite you, and i'm
certainly not going to go "bad-mouthing" you to anyone!

no i do *not* go bad-mouthing people. look at what i wrote, if you
still have access to it. i said (paraphrasing) "the code in webkit
*i* found caused *me* to shudder in distress and horror at having to
work with it." i didn't say "the webkit developers are personally
shit-arse-holes because they wrote shit", did i? i said also that i
noticed that their decisions caused them a large maintenance burden.

that's not personal criticism: that's an observation. one which i
would very much like to share with you so that not only *you* go
forwards with this project with your eyes fully open but that you are
*SEEN* to be going forwards with this project with your eyes fully
open.

whoever you are, you have a responsibility and a duty to yourself and
to your users, to remain "open" as in "an open project".

getting onto IRC channels and giving running commentaries of how
someone who would very much like to aid, assist and advance the
netsurf project is, according to you "trying to tell everyone how shit
everbody else's project is" ... that doesn't do any of us any favours,
does it?

it just reflects extremely badly on *you*... and embarrasses the hell
out of my friend, to whom i'm now going to have to apologise to,
deeply, for having written this without consulting him. i'll have to
explain to him that i felt it was more important to deal with you,
publicly, and to give you an opportunity to clear the air should you
so choose. but... that's my problem to deal with, not yours. *my*
choice. you have no responsibility for my decisions and you do not
need to feel obligated to apologise for, or to feel in any way that
you have embarrassed our mutual friend as a result of *my* decisions
or actions, ok?

ok, enough - it's hellishly late here, i have to stop, get some
sleep. but please, for goodness sake think about what i've written.
the thoughts weren't in *my* head - they were in yours, weren't they?

l.

No comments:

Post a Comment