Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing Userspace Bug - Slashdot

2013-01-02 Thread Carl Gundel
-Original Message-
From: Pascal J. Bourguignon
Sent: Monday, December 31, 2012 4:22 PM
To: Fundamentals of New Computing
Subject: Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing Userspace 
Bug - Slashdot

Carl Gundel ca...@psychesystems.com writes:

 “If there are contradictions in the design, the program shouldn't 
 compile.”

  

 How can a compiler know how to make sense of domain specific 
 contradictions?  I can only imagine the challenges we would face if 
 compilers operated in this way.

Contradictions are often not really contradictions.

I was referring to the contradictions that really are contradictions.  ;-)

It's a question of representation, that is, of mapping of the domain, 
to some other domain, usually a formal system.

Yet another dimension in which we can make a mistake?  Would this be another 
kind of unit test?  Unit tests can be useful, but they have to be correct and 
there is a cost to maintaining them.

Now we know that a given formal system cannot be at the same time complete 
and consistent, but nothing prevents an automatic system to work with an 
incomplete 
system or an inconsistent system (or even a system that's both incomplete and 
inconsistent).

The only thing, is that sometimes you may reach conclusions such as 1=2, but 
if you
expect them, you can deal with them.  We do everyday.

Notably, by modifying the mapping between the domain and the formal
system: for different parts of the domain, you can use different formal 
systems, or 
avoid some axioms or theorems leading to a contradiction, to find some usable 
conclusion.

Are you just talking about a system which will run real time uber lint checks 
that you can refer to while writing code?

Daily, we use formal rules, that are valid just in some context.  The 
conclusions 
we reach can easily be invalidated, if the context is wrong
for the application of those rules.   If we tried to take into account
all the possible rules, we'd get soon enough inconsistencies.  But by 
restricting 
the mapping of the domain to some contextual rules, we can read usable 
conclusions
(most of the time).  When the conclusion doesn't match the domain, we may ask
where the error is, and often it's just the context that was wrong, not the 
rules.

Okay, but if I have to waste my time struggling through the mostly usable 
conclusions to figure out which ones are usable, and whether or not I actually 
care about the conclusion, then the value of such a system is debatable.

We will have to embrace Artifical Intelligence, even in compilers, eventually.

Yeah, let me know when it is finally invented so I can give it a big hug.

-Carl

___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing Userspace Bug - Slashdot

2013-01-01 Thread BGB

On 12/31/2012 10:47 PM, Marcus G. Daniels wrote:

On 12/31/12 8:30 PM, Paul D. Fernhout wrote:
So, I guess another meta-level bug in the Linux Kernel is that it is 
written in C, which does not support certain complexity management 
features, and there is no clear upgrade path from that because C++ 
has always had serious linking problems.
But the ABIs aren't specified in terms of language interfaces, they 
are architecture-specific.  POSIX kernel interfaces don't need C++ 
link level compatibility, or even extern C compatibility 
interfaces.  Similarly on the device side, that's packing command 
blocks and such, byte by byte.  Until a few years ago, GCC was the 
only compiler ever used (or able) to compile the Linux kernel.  It is 
a feature that it all can be compiled with one open source toolchain.  
Every aspect can be improved.




granted.

typically, the actual call into kernel-land is a target-specific glob of 
ASM code, which may then be wrapped up to make all the various system calls.



as for ABIs a few things could help:
if the C++ ABI was defined *along with* the C ABI for a given target;
if the C++ compilers would use said ABI, rather than each rolling their own;
if the ABI were sufficiently general to be more useful to multiple 
languages (besides just C and C++);

...

in this case, the C ABI could be considered a formal subset of the C++ ABI.


admittedly, if I could have my say, I would make some changes to the way 
struct/class passing and returning is handled in SysV / AMD64. namely 
make it less complicated/evil, like, say, the struct is either passed in 
a single register, or passed as a reference (no decomposition and 
passing via multiple registers).


more-so, probably also provide spill-space for arguments passed as 
registers (more like in Win64).



granted, this itself may illustrate part of the problem:
with many of these ABIs, not everyone is happy, so there is a lot of 
temptation for compiler vendors to go their own way (making going mix 
and match with code compiled by different compilers, or sometimes with 
different compiler options, unsafe...).


sometimes, it may usually work, but sometimes fail, due to minor ABI 
differences.



From that thread I read that those in the Linus camp are fine with 
abstraction, but it has to be their abstraction on their terms. An 
later in the thread, Theodore T'so gave an example of opacity in the 
programming model:


a = b + /share/ + c + serial_num;

Arguing where you can have absolutely no idea how many memory 
allocations are

done, due to type coercions, overloaded operators

Well, I'd say just write the code in concise notation.  If there are 
memory allocations they'll show up in valgrind runs, for example. Then 
disassemble that function and understand what the memory allocations 
actually are.  If there is a better way to do it, then either change 
abstractions, or improve the compiler to do it more efficiently.   
Yes, there can be an investment in a lot of stuff. But just defining 
any programming model with a non-obvious performance model as a bad 
programming model is shortsighted advice, especially for developers 
outside of the world of operating systems.   That something is 
non-obvious is not necessarily a bad thing.   It just means a bit more 
depth-first investigation.   At least one can _learn_ something from 
the diversion.




yep.

some of this is also a bit of a problem for many VM based languages, 
which may, behind the scenes, chew through memory, while giving little 
control of any of this to the programmer.


in my case, I have been left fighting performance in many areas with my 
own language, admittedly because its present core VM design isn't 
particularly high performance in some areas.



though, one can still be left looking at a sort of ugly wall:
the wall separating static and dynamic types.

dynamic types is a land of relative ease, but not particularly good 
performance.
static types is a land of pain and implementation complexity, but also 
better performance.


well, there is also the fixnum issue, where a fixnum may be just 
slightly smaller than an analogous native type (it is the curse of the 
28-30 bit fixnum, or the 60-62 bit long-fixnum...).


this issue is annoying specifically because it specifically gets in the 
way of having an efficient fixnum type and also map it to a sensible 
native type (like int) while keeping the usual definition  intact that 
int is exactly 32-bits and/or that long is exactly 64-bits.


but, as a recent attempt at trying to switch to untagged value types 
revealed, even with an interpreter core that is mostly statically 
typed, making this switch may still open a big can of worms in some 
other cases (because there are still holes in the static type-system).



I have been left considering the possibility of instead making a compromise:
int, float, and double can be represented directly;
long, however, would (still) be handled as a boxed-value.

this 

Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing Userspace Bug - Slashdot

2012-12-31 Thread Paul Homer
My take is that crafting software is essentially creating a formal system. No 
doubt there is some clean, normalized way to construct each one, but given that 
the work is being done by humans, a large number of less than optimal elements 
find their way into the system. Since everyone is basically distinct, their own 
form of semi-normalization is unique. Get a bunch of these together in the same 
system and there will be inevitable clashes. But given that it#39;s often one 
variant of weirdness vs another, there is no basis for rational arguments, thus 
tempers and frustration flair. In the long run however, it#39;s best to pick 
one weirdness and stick with it (as far as it goes). We don#39;t yet have the 
knowledge or skills to harmonize these types of systems.

Paul.___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing Userspace Bug - Slashdot

2012-12-31 Thread John Carlson
I would hope that something like
http://en.wikipedia.org/wiki/Z_notationcould be used to specify
computer systems.  No, I've never used Z
notation.  It looks like WSDL 2.0 contains it.  Cucumber seems more
practical, but along the same lines.  I've never used Cucumber either.  The
problem is that specification languages seem to include extra overhead.
One has to prove productivity.  That is the question, how do we improve
productivity while decreasing bugs.  Don't do things twice seems to be a
good rationale, if the language/system can support it.

John


On Mon, Dec 31, 2012 at 9:51 AM, Paul Homer paul_ho...@yahoo.ca wrote:

 My take is that crafting software is essentially creating a formal system.
 No doubt there is some clean, normalized way to construct each one, but
 given that the work is being done by humans, a large number of less than
 optimal elements find their way into the system. Since everyone is
 basically distinct, their own form of semi-normalization is unique. Get a
 bunch of these together in the same system and there will be inevitable
 clashes. But given that it's often one variant of weirdness vs another,
 there is no basis for rational arguments, thus tempers and frustration
 flair. In the long run however, it's best to pick one weirdness and stick
 with it (as far as it goes). We don't yet have the knowledge or skills to
 harmonize these types of systems.

 Paul.

  --
 * From: * BGB cr88...@gmail.com;
 * To: * fonc@vpri.org;
 * Subject: * Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing
 Userspace Bug - Slashdot
 * Sent: * Mon, Dec 31, 2012 7:32:31 AM

   On 12/30/2012 10:49 PM, Paul D. Fernhout wrote:
  Some people here might find of interest my comments on the situation in
 the title, posted in this comment here:
  http://slashdot.org/comments.pl?sid=3346421cid=42430475
 
  After citing Alan Kay's OOPSLA 1997 The Computer Revolution Has Not
 Happened Yet speech, the key point I made there is:
  Yet, I can't help but feel that the reason Linus is angry, and fearful,
 and shouting when people try to help maintain the kernel and fix it and
 change it and grow it is ultimately because Alan Kay is right. As Alan Kay
 said, you never have to take a baby down for maintenance -- so why do you
 have to take a Linux system down for maintenance?
 
  Another comment I made in that thread cited Andrew Tanenbaum's 1992
 comment that it is now all over but the shoutin':
 
 http://developers.slashdot.org/comments.pl?sid=3346421threshold=0commentsort=0mode=threadcid=42426755
 
  So, perhaps now we finally twenty-years see the shouting begin as the
 monolithic Linux kernel reaches its limits as a community process? :-)
 Still, even if true, it was a good run.
 
  The main article can be read here:
 
 http://developers.slashdot.org/story/12/12/29/018234/linus-chews-up-kernel-maintainer-for-introducing-userspace-bug
 
  This is not to focus on personalities or the specifics of that mailing
 list interaction -- we all make mistakes (whether as leaders or followers
 or collaborators), and I don't fully understand the culture of the Linux
 Kernel community. I'm mainly raising an issue about how software design
 affects our emotions -- in this case, making someone angry probably about
 something they fear -- and how that may point the way to better software
 systems like FONC aspired to.
 

 dunno...

 in this case, I think Torvalds was right, however, he could have handled
 it a little more gracefully.

 code breaking changes are generally something to be avoided wherever
 possible, which seems to be the main issue here.

 sometimes it is necessary though, but usually this needs to be for a damn
 good reason.
 more often though this leads to a shim, such that new functionality can be
 provided, while keeping whatever exists still working.

 once a limit is hit, then often there will be a clean break, with a new
 shiny whatever provided, which is not backwards compatible with the old
 interface (and will generally be redesigned to address prior deficiencies
 and open up routes for future extension).

 then usually, both will coexist for a while, usually until one or the
 other dies off (either people switch to the new interface, or people rebel
 and stick to the old one).

 in a few cases in history, this has instead leads to forks, with the old
 and new versions developing in different directions, and becoming separate
 and independent pieces of technology.

 for example, seemingly unrelated file formats that have a common ancestor,
 or different CPU ISA's that were once a single ISA, ...

 likewise, at each step, backwards compatibility may be maintained, but
 this doesn't necessarily mean that things will remain static. sometimes,
 there may still be a common-subset, buried off in there somewhere, or in
 other cases the loss of occasional archaic details, will cause what
 remains of this common subset to gradually fade away.



 as for design and emotions:
 I

Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing Userspace Bug - Slashdot

2012-12-31 Thread Paul Homer
I don#39;t think a more formalized language really gets around the problem. If 
that were true, we#39;d have already fallen back to the most consistent, yet 
simple languages available, such as assembler. But on top of these we build 
significantly more complex systems, bent by our own internal variations on 
logic. It#39;s that layer that causes the problems. What seems like it might 
be successful is to pair our constructions with many languages that more 
closely match how people think. Now I know that sounds weird, but not if one 
accepts that a clunky, ugly language like COBOL was actually very successful. 
Lots of stuff was written, much of it still running. Its own excessive 
verbosity helps in making it fixable by a broader group of people. 

Of course there is still a huge problem with that idea. Once written, if the 
author is no longer available, the work effectively becomes frozen. It can be 
built upon, but it is hard to truly expand. Thus we get to what we have now, a 
rather massive house of cards that becomes ever more perilous to build upon. If 
we want to break the cycle, we have to choose a new option. The size of the 
work is beyond any individual#39;s capacity, combining different people#39;s 
work is prone to clashes, the more individualized we make the languages the 
harder they are to modify, and the more normalized we make the hard they are to 
use.

Paul.
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing Userspace Bug - Slashdot

2012-12-31 Thread Marcus G. Daniels

On 12/31/12 10:30 AM, Paul Homer wrote:
Now I know that sounds weird, but not if one accepts that a clunky, 
ugly language like COBOL was actually very successful. Lots of stuff 
was written, much of it still running. Its own excessive verbosity 
helps in making it fixable by a broader group of people.



For the waterfall approach used by designers behind COBOL 
implementations, the philsophy of measure twice; cut once is 
consistent with a formal approach.But if there are so many bugs that 
last for decades, and bugs that can just be fixed by superficial 
analysis as facilitated by COBOL's verbosity, then there is something 
seriously wrong with the design and/or verification in the process.


I think design without automated code generation and proof-checking 
support is passing the buck.  Ideally, the principles underlying a 
program should be in that program, and not just as comments.   If there 
are contradictions in the design, the program shouldn't compile.   As 
the design is fleshed out to make a useful program, the programmer (now 
also a designer) should have the tools to continue to prove all of the 
pieces.  At the end of the day, all bugs should be considered the 
responsibility of highest level designers.   There should be no `cut' at 
all.


Of course, there is rarely the time or incentive structure to do any of 
this.  Productive programmers are the ones that get results and are fast 
at fixing (and creating) bugs.  In critical systems, at least, that's 
the wrong incentive structure.  In these situations, it's more important 
to reward people that create tests, create internal proofs, and refactor 
and simplify code.  Having very dense code that requires investment to 
change is a good thing in these situations.  A `bad change' should be 
trivial in practice to identify:  The compiler and/or test suite would 
not let it through -- an objective fact, not an opinion of `experts'.


Marcus
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing Userspace Bug - Slashdot

2012-12-31 Thread Paul Homer
Most programs are models of our irrational world. Reflections of rather 
informal systems that are inherently ambiguous and contradictory, just like our 
species. Nothing short of #39;intelligence#39; could validate that those 
types of rules match their intended usage in the real world. If we don#39;t 
build our internal systems models with this in mind, then they#39;d be too 
fragile to solve real problems for us. Like it or not, intelligence is a 
necessary ingredient, and we don#39;t yet have any alternatives but ourselves 
to fill it.

Paul.___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing Userspace Bug - Slashdot

2012-12-31 Thread Carl Gundel
+1

 

From: fonc-boun...@vpri.org [mailto:fonc-boun...@vpri.org] On Behalf Of Paul
Homer
Sent: Monday, December 31, 2012 3:09 PM
To: fonc@vpri.org
Subject: Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing
Userspace Bug - Slashdot

 


Most programs are models of our irrational world. Reflections of rather
informal systems that are inherently ambiguous and contradictory, just like
our species. Nothing short of 'intelligence' could validate that those types
of rules match their intended usage in the real world. If we don't build our
internal systems models with this in mind, then they'd be too fragile to
solve real problems for us. Like it or not, intelligence is a necessary
ingredient, and we don't yet have any alternatives but ourselves to fill it.

Paul.

 

  _  

From: Marcus G. Daniels mar...@snoutfarm.com; 
To: fonc@vpri.org; 
Subject: Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing
Userspace Bug - Slashdot 
Sent: Mon, Dec 31, 2012 7:50:13 PM 


On 12/31/12 12:25 PM, Carl Gundel wrote:

If there are contradictions in the design, the program shouldn't compile.

 

How can a compiler know how to make sense of domain specific contradictions?
I can only imagine the challenges we would face if compilers operated in
this way.

 

In the case of numerical method development, the math is represented in
Mathematica (Maple, Sage, Macsyma, etc.) and simulations are done using the
same or Matlab (Octave, Scipy, R, etc.).  The foundational work is already a
program.   One practical way to advance the state of the art would be to
ensure that the symbolic math packages had compilers that created
executables that performed as well as Fortran. 

In general, I'm imagining more programmers adopting languages like Agda,
Coq, and ATS, and elaborating their compilers and runtimes to be practical
for programming in the large. 

Marcus



 

___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing Userspace Bug - Slashdot

2012-12-31 Thread Alan Moore
I agree with Paul...

As programmers we have too many degrees of freedom, too many chances for
random variation that needs to be negotiated at every interface between
components, etc.

Imagine building a car with randomly varying bolt and nut sizes, with no
two cars following the same pattern.

Craziness I say... make it stop, make it stop! :-/

I think these things are better off simplified in the extreme and carried
out by automatons, get the humans out of the picture...

Humans should focus on higher level requirements not the nuts and bolts of
software construction.

Or perhaps a more stochastic process like biology and let order emerge from
chaos - maybe the logic will be less brittle that way... But that may be a
ways off yet.

Clearly whatever we are doing isn't working - it is pure madness to
continue in this way.

Alan Moore


On Dec 31, 2012, at 12:09 PM, Paul Homer paul_ho...@yahoo.ca wrote:

Most programs are models of our irrational world. Reflections of rather
informal systems that are inherently ambiguous and contradictory, just like
our species. Nothing short of 'intelligence' could validate that those
types of rules match their intended usage in the real world. If we don't
build our internal systems models with this in mind, then they'd be too
fragile to solve real problems for us. Like it or not, intelligence is a
necessary ingredient, and we don't yet have any alternatives but ourselves
to fill it.

Paul.

 --
* From: * Marcus G. Daniels mar...@snoutfarm.com;
* To: * fonc@vpri.org;
* Subject: * Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing
Userspace Bug - Slashdot
* Sent: * Mon, Dec 31, 2012 7:50:13 PM

  On 12/31/12 12:25 PM, Carl Gundel wrote:

 “If there are contradictions in the design, the program shouldn't compile.”



How can a compiler know how to make sense of domain specific
contradictions?  I can only imagine the challenges we would face if
compilers operated in this way.



In the case of numerical method development, the math is represented in
Mathematica (Maple, Sage, Macsyma, etc.) and simulations are done using the
same or Matlab (Octave, Scipy, R, etc.).  The foundational work is already
a program.   One practical way to advance the state of the art would be to
ensure that the symbolic math packages had compilers that created
executables that performed as well as Fortran.

In general, I'm imagining more programmers adopting languages like Agda,
Coq, and ATS, and elaborating their compilers and runtimes to be practical
for programming in the large.

Marcus


___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing Userspace Bug - Slashdot

2012-12-31 Thread Paul D. Fernhout

On 12/31/12 2:32 AM, BGB wrote:

in this case, I think Torvalds was right, however, he could have handled
it a little more gracefully.

code breaking changes are generally something to be avoided wherever
possible, which seems to be the main issue here.


While many people posting in the slashdot thread would agree with both 
your points, it seems that this particular kernel patch had problems for 
other reasons, and that distinction has been ignored by most commenters. 
According to the submitter of the patch being criticized, it seems like 
the patch was intended to move towards unifying the error codes issued 
by a set of related drivers. What seems to have happened was that the 
patch submitter by (IMHO poor) design used an error code internally to 
indicate an error condition that was not meant to leak out back the the 
user of the driver. The error code was supposed to be transformed as it 
passed the driver boundary, but was not in this case. So the error code 
leaked out of the driver (where the meaning of the specific numerical 
value would thus change as it passed the driver boundary), and then 
Linus interpreted this situation as an intent by the programmer's or 
maintainer's to provide an unexpected and inappropriate error codes 
(thus the strong language). But it was more like there was some sloppy 
programming on top of a problematical design choice (problematical 
because exactly this sort of thing could happen) on top of the 
maintainer not seeing that. Granted, that provides plenty of room for 
complaint, but it is questionable if Linus saw this when he replied. 
More specifics on that in a comment I posted with a link to supporting 
posts on the kernel list:

http://slashdot.org/comments.pl?sid=3346421cid=42417029

But here are direct links to related kernel mailing list posts by the 
patch submitter and the kernel maintainer:

https://lkml.org/lkml/2012/12/23/89
https://lkml.org/lkml/2012/12/24/125

So, the human emotions are on top of an issues that seemed incompletely 
understood. Psychological studies, like of novice vs. expert fire 
fighters, have shown that where the novice generally tries to use reason 
to solve a problem (What is going on here based on thinking about the 
details? What will be the consequences of various choices?), the expert 
tends to use pattern matching (I've seen this situation before and here 
is what we should do.) So, that is why experts can make quick 
judgements and prescribe successful strategies. The experts work in 
bigger chunks. Still, a downside to that sort of expert reasoning 
through pattern matching is that it is easy to leap to a conclusion and 
incorrect prescription when the underlying situation is very close to a 
common one but has some unexpected twist (as seems to be the case here).


Anyway, good to see this sparked some interesting discussion.

--Paul Fernhout
http://www.pdfernhout.net/

The biggest challenge of the 21st century is the irony of technologies 
of abundance in the hands of those thinking in terms of scarcity.

___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing Userspace Bug - Slashdot

2012-12-31 Thread Simon Forman
On Mon, Dec 31, 2012 at 12:24 PM, Paul D. Fernhout
pdfernh...@kurtz-fernhout.com wrote:
 On 12/31/12 2:32 AM, BGB wrote:

 in this case, I think Torvalds was right, however, he could have handled
 it a little more gracefully.

 code breaking changes are generally something to be avoided wherever
 possible, which seems to be the main issue here.


 While many people posting in the slashdot thread would agree with both your
 points, it seems that this particular kernel patch had problems for other
 reasons, and that distinction has been ignored by most commenters. According
 to the submitter of the patch being criticized, it seems like the patch was
 intended to move towards unifying the error codes issued by a set of related
 drivers. What seems to have happened was that the patch submitter by (IMHO
 poor) design used an error code internally to indicate an error condition
 that was not meant to leak out back the the user of the driver. The error
 code was supposed to be transformed as it passed the driver boundary, but
 was not in this case. So the error code leaked out of the driver (where the
 meaning of the specific numerical value would thus change as it passed the
 driver boundary), and then Linus interpreted this situation as an intent by
 the programmer's or maintainer's to provide an unexpected and inappropriate
 error codes (thus the strong language). But it was more like there was some
 sloppy programming on top of a problematical design choice (problematical
 because exactly this sort of thing could happen) on top of the maintainer
 not seeing that. Granted, that provides plenty of room for complaint, but it
 is questionable if Linus saw this when he replied. More specifics on that in
 a comment I posted with a link to supporting posts on the kernel list:
 http://slashdot.org/comments.pl?sid=3346421cid=42417029

 But here are direct links to related kernel mailing list posts by the patch
 submitter and the kernel maintainer:
 https://lkml.org/lkml/2012/12/23/89
 https://lkml.org/lkml/2012/12/24/125

 So, the human emotions are on top of an issues that seemed incompletely
 understood. Psychological studies, like of novice vs. expert fire fighters,
 have shown that where the novice generally tries to use reason to solve a
 problem (What is going on here based on thinking about the details? What
 will be the consequences of various choices?), the expert tends to use
 pattern matching (I've seen this situation before and here is what we
 should do.) So, that is why experts can make quick judgements and prescribe
 successful strategies. The experts work in bigger chunks. Still, a
 downside to that sort of expert reasoning through pattern matching is that
 it is easy to leap to a conclusion and incorrect prescription when the
 underlying situation is very close to a common one but has some unexpected
 twist (as seems to be the case here).

 Anyway, good to see this sparked some interesting discussion.


 --Paul Fernhout


Thank you for elucidating the situation like you have. Your evaluation
agrees with my own, which I find gratifying, but even if it didn't I
am excited to see the social process happen publicly and
transparently.  (As opposed to the kind of primate politics that an
incident like this might trigger in, for example, a tradition
corporation or other institution.)

I see it as a win for open methods even if Torvalds might have a bit
of egg on his face.

~Simon Forman

-- 
http://twitter.com/SimonForman
http://www.dendritenetwork.com/

The history of mankind for the last four centuries is rather like
that of an imprisoned sleeper, stirring clumsily and uneasily while
the prison that restrains and shelters him catches fire, not waking
but incorporating the crackling and warmth of the fire with ancient
and incongruous dreams, than like that of a man consciously awake to
danger and opportunity.  --H. P. Wells, A Short History of the
World
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing Userspace Bug - Slashdot

2012-12-31 Thread Pascal J. Bourguignon
Carl Gundel ca...@psychesystems.com writes:

 “If there are contradictions in the design, the program shouldn't
 compile.”

  

 How can a compiler know how to make sense of domain specific
 contradictions?  I can only imagine the challenges we would face if
 compilers operated in this way.

Contradictions are often not really contradictions.

It's a question of representation, that is, of mapping of the domain,
to some other domain, usually a formal system.

Now we know that a given formal system cannot be at the same time
complete and consistent, but nothing prevents an automatic system to
work with an incomplete system or an inconsistent system (or even a
system that's both incomplete and inconsistent).

The only thing, is that sometimes you may reach conclusions such as 1=2,
but if you expect them, you can deal with them.  We do everyday.

Notably, by modifying the mapping between the domain and the formal
system: for different parts of the domain, you can use different formal
systems, or avoid some axioms or theorems leading to a contradiction, to
find some usable conclusion.


Daily, we use formal rules, that are valid just in some context.  The
conclusions we reach can easily be invalidated, if the context is wrong
for the application of those rules.   If we tried to take into account
all the possible rules, we'd get soon enough inconsistencies.  But by
restricting the mapping of the domain to some contextual rules, we can
read usable conclusions (most of the time).  When the conclusion doesn't
match the domain, we may ask where the error is, and often it's just the
context that was wrong, not the rules.


We will have to embrace Artifical Intelligence, even in compilers, eventually.

-- 
__Pascal Bourguignon__ http://www.informatimago.com/
A bad day in () is better than a good day in {}.
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing Userspace Bug - Slashdot

2012-12-31 Thread J. Andrew Rogers

On Dec 31, 2012, at 1:21 PM, Pascal J. Bourguignon p...@informatimago.com 
wrote:
 
 Now we know that a given formal system cannot be at the same time
 complete and consistent, but nothing prevents an automatic system to
 work with an incomplete system or an inconsistent system (or even a
 system that's both incomplete and inconsistent).
 
 The only thing, is that sometimes you may reach conclusions such as 1=2,
 but if you expect them, you can deal with them.  We do everyday.
 
 Notably, by modifying the mapping between the domain and the formal
 system: for different parts of the domain, you can use different formal
 systems, or avoid some axioms or theorems leading to a contradiction, to
 find some usable conclusion.


In chemical engineering, you design complex, dynamic systems that look like 
distributed computing systems in software, except that you replace bits with 
molecules. In the abstract, they are incredibly similar. I've often stated that 
my chemical engineering education was a valuable foundation for my later work 
in distributed and parallel systems.

Chemical engineering systems commonly have an interesting property: despite 
being built from a system of physics equations and carefully measured facts 
about reality, you can reduce that single set of inputs to multiple mutually 
inconsistent models of system behavior with material differences. The 
discipline has a rich set of heuristics and methods for dealing with complex 
distributed system problems that have significant internal contradictions, and 
with obviously good results, but you rarely see explicit analogues applied in 
software systems.

Computer science, perhaps due to its direct mathematical derivation, is not 
comfortable with an equivalent state of affairs where 1=2. Nonetheless, 
models of real complex systems tend to have this property.

___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing Userspace Bug - Slashdot

2012-12-31 Thread Marcus G. Daniels

On 12/31/12 1:44 PM, Paul D. Fernhout wrote:
So, it was a meta-bug in that sense about an unexpected meaning shift 
when a number leaked beyond a boundary that was supposed to contain it. 

[..]
I'm not sure what sort of automated systems could deal with that kind 
of unexpected semantic shift? Still, for that one case, probably one 
could come up with a way of defining symbols that could not leak 
across boundaries because of compiler checks or using public/private 
typed aspects of languages to do that (like for example even in Java 
where you had a public enum for error codes to return to user space, 
but a different private enum for internal state). In practice the C 
language the Linux kernel is written in may not make that easy to 
enforce programmatically though.
Yup. Add more opaque types in the kernel implementation so that a type 
conversion (to the POSIX semantics) _must_ occur.  GCC recently 
converted to compiling itself in stricter C++ mode, and the world did 
not end.  In spite of advice such as..


http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918

Marcus
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing Userspace Bug - Slashdot

2012-12-31 Thread Marcus G. Daniels

On 12/31/12 8:30 PM, Paul D. Fernhout wrote:
So, I guess another meta-level bug in the Linux Kernel is that it is 
written in C, which does not support certain complexity management 
features, and there is no clear upgrade path from that because C++ has 
always had serious linking problems.
But the ABIs aren't specified in terms of language interfaces, they are 
architecture-specific.  POSIX kernel interfaces don't need C++ link 
level compatibility, or even extern C compatibility interfaces.  
Similarly on the device side, that's packing command blocks and such, 
byte by byte.  Until a few years ago, GCC was the only compiler ever 
used (or able) to compile the Linux kernel.  It is a feature that it all 
can be compiled with one open source toolchain.  Every aspect can be 
improved.


From that thread I read that those in the Linus camp are fine with 
abstraction, but it has to be their abstraction on their terms.   An 
later in the thread, Theodore T'so gave an example of opacity in the 
programming model:


a = b + /share/ + c + serial_num;

Arguing where you can have absolutely no idea how many memory 
allocations are

done, due to type coercions, overloaded operators

Well, I'd say just write the code in concise notation.  If there are 
memory allocations they'll show up in valgrind runs, for example. Then 
disassemble that function and understand what the memory allocations 
actually are.  If there is a better way to do it, then either change 
abstractions, or improve the compiler to do it more efficiently.   Yes, 
there can be an investment in a lot of stuff. But just defining any 
programming model with a non-obvious performance model as a bad 
programming model is shortsighted advice, especially for developers 
outside of the world of operating systems.   That something is 
non-obvious is not necessarily a bad thing.   It just means a bit more 
depth-first investigation.   At least one can _learn_ something from the 
diversion.


Marcus
___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc


Re: [fonc] Linus Chews Up Kernel Maintainer For Introducing Userspace Bug - Slashdot

2012-12-30 Thread BGB

On 12/30/2012 10:49 PM, Paul D. Fernhout wrote:
Some people here might find of interest my comments on the situation 
in the title, posted in this comment here:

http://slashdot.org/comments.pl?sid=3346421cid=42430475

After citing Alan Kay's OOPSLA 1997 The Computer Revolution Has Not 
Happened Yet speech, the key point I made there is:
Yet, I can't help but feel that the reason Linus is angry, and 
fearful, and shouting when people try to help maintain the kernel and 
fix it and change it and grow it is ultimately because Alan Kay is 
right. As Alan Kay said, you never have to take a baby down for 
maintenance -- so why do you have to take a Linux system down for 
maintenance?


Another comment I made in that thread cited Andrew Tanenbaum's 1992 
comment that it is now all over but the shoutin':
http://developers.slashdot.org/comments.pl?sid=3346421threshold=0commentsort=0mode=threadcid=42426755 



So, perhaps now we finally twenty-years see the shouting begin as the 
monolithic Linux kernel reaches its limits as a community process? :-) 
Still, even if true, it was a good run.


The main article can be read here:
http://developers.slashdot.org/story/12/12/29/018234/linus-chews-up-kernel-maintainer-for-introducing-userspace-bug 



This is not to focus on personalities or the specifics of that mailing 
list interaction -- we all make mistakes (whether as leaders or 
followers or collaborators), and I don't fully understand the culture 
of the Linux Kernel community. I'm mainly raising an issue about how 
software design affects our emotions -- in this case, making someone 
angry probably about something they fear -- and how that may point the 
way to better software systems like FONC aspired to.




dunno...

in this case, I think Torvalds was right, however, he could have handled 
it a little more gracefully.


code breaking changes are generally something to be avoided wherever 
possible, which seems to be the main issue here.


sometimes it is necessary though, but usually this needs to be for a 
damn good reason.
more often though this leads to a shim, such that new functionality can 
be provided, while keeping whatever exists still working.


once a limit is hit, then often there will be a clean break, with a 
new shiny whatever provided, which is not backwards compatible with the 
old interface (and will generally be redesigned to address prior 
deficiencies and open up routes for future extension).


then usually, both will coexist for a while, usually until one or the 
other dies off (either people switch to the new interface, or people 
rebel and stick to the old one).


in a few cases in history, this has instead leads to forks, with the old 
and new versions developing in different directions, and becoming 
separate and independent pieces of technology.


for example, seemingly unrelated file formats that have a common 
ancestor, or different CPU ISA's that were once a single ISA, ...


likewise, at each step, backwards compatibility may be maintained, but 
this doesn't necessarily mean that things will remain static. sometimes, 
there may still be a common-subset, buried off in there somewhere, or in 
other cases the loss of occasional archaic details, will cause what 
remains of this common subset to gradually fade away.




as for design and emotions:
I think people mostly prefer to stay with familiar things.
unfamiliar things will often drive people away, especially if they look 
scary of different, whereas people will be more forgiving of things 
which look familiar, even if they are different internally.


often this may well amount to shims as well, where something familiar 
will be emulated as a shim on top of something different. even if it is 
actually fake, people will not care, they can just keep on doing what 
they were doing before.


granted, yes, when some people look into the heart of computing, and 
see this seeming mountain of things held together mostly by shims and 
some amount of duct tape, they regard it as a thing of horror. others 
may see it, and be like this is just how it is.


luckily, it doesn't go on indefinitely, as often with enough shims, it 
will create a sufficiently thick layer of abstraction to where it may 
become more reasonable to rip out a lot of it, while only maintaining 
the surface-level details (for sake of compatibility). compatibility may 
be maintained, even if a lot of what goes on in-between has since 
changed, and things can be extended that much longer...


granted, by this point, it is often less the thing it once was so much 
as an emulator.
but, under the surface, what is the real-thing, and what is an emulator, 
isn't really always all that certain. what usually defines an emulator 
then, is not so much about what it actually does, but how much of a big 
ugly seam there is in it doing so.



or such...

___
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc