Fwd: Building gcc-4.9 on OpenBSD

2014-09-17 Thread Ian Grant
The reason I'm doing this is that I want to understand why the total
size of the binaries grew from around 10MB (gcc v 4.5) to over 70MB in
4.9

I can compile the first stage OK, and the binaries are quite modest:

-rwxr-xr-x  1 ian  ian  17.2M Sep  6 03:47 prev-gcc/cc1
-rwxr-xr-x  1 ian  ian   1.2M Sep  6 04:24 prev-gcc/cpp
-rwxr-xr-x  1 ian  ian   1.2M Sep  6 04:24 prev-gcc/xgcc

The 2nd stage doesn't compile however, because the Intel library
doesn't support OpenBSD. The host/target is i386-unknown-openbsd5.4:

../.././libcilkrts/runtime/os-unix.c:69:5: error: #error "Unsupported OS"
 #   error "Unsupported OS"
 ^
../.././libcilkrts/runtime/os-unix.c: In function
'__cilkrts_hardware_cpu_count':
../.././libcilkrts/runtime/os-unix.c:386:2: error: #error "Unknown architecture"
 #error "Unknown architecture"
  ^
Makefile:691: recipe for target 'os-unix.lo' failed

My questions are, is this what I should expect in terms of file sizes?:

ian3@jaguar:~/build/guile-2.0.11$ ls -l ~/usr/bin/gcc
~/usr/libexec/gcc/i686-pc-linux-gnu/4.9.0/cc1
-rwxr-xr-x 3 ian3 ian3  2538426 2014-08-03 01:18 /home/ian3/usr/bin/gcc
-rwxr-xr-x 1 ian3 ian3 66149541 2014-08-03 01:18
/home/ian3/usr/libexec/gcc/i686-pc-linux-gnu/4.9.0/cc1
ian3@jaguar:~/build/guile-2.0.11$

And is there any way to disable the Intel library? The fact that the
first stage bootstrap works without it indicates that it might be
possible.

Thanks
Ian


Fwd: Building gcc-4.9 on OpenBSD

2014-09-17 Thread Ian Grant
The reason I'm doing this is that I want to understand why the total
size of the binaries grew from around 10MB (gcc v 4.5) to over 70MB in
4.9

I can compile the first stage OK, and the binaries are quite modest:

-rwxr-xr-x  1 ian  ian  17.2M Sep  6 03:47 prev-gcc/cc1
-rwxr-xr-x  1 ian  ian   1.2M Sep  6 04:24 prev-gcc/cpp
-rwxr-xr-x  1 ian  ian   1.2M Sep  6 04:24 prev-gcc/xgcc

The 2nd stage doesn't compile however, because the Intel library
doesn't support OpenBSD. The host/target is i386-unknown-openbsd5.4:

../.././libcilkrts/runtime/os-unix.c:69:5: error: #error "Unsupported OS"
 #   error "Unsupported OS"
 ^
../.././libcilkrts/runtime/os-unix.c: In function
'__cilkrts_hardware_cpu_count':
../.././libcilkrts/runtime/os-unix.c:386:2: error: #error "Unknown architecture"
 #error "Unknown architecture"
  ^
Makefile:691: recipe for target 'os-unix.lo' failed

My questions are, is this what I should expect in terms of file sizes?:

ian3@jaguar:~/build/guile-2.0.11$ ls -l ~/usr/bin/gcc
~/usr/libexec/gcc/i686-pc-linux-gnu/4.9.0/cc1
-rwxr-xr-x 3 ian3 ian3  2538426 2014-08-03 01:18 /home/ian3/usr/bin/gcc
-rwxr-xr-x 1 ian3 ian3 66149541 2014-08-03 01:18
/home/ian3/usr/libexec/gcc/i686-pc-linux-gnu/4.9.0/cc1
ian3@jaguar:~/build/guile-2.0.11$

And is there any way to disable the Intel library? The fact that the
first stage bootstrap works without it indicates that it might be
possible.

Thanks
Ian


Re: Fwd: Building gcc-4.9 on OpenBSD

2014-09-17 Thread Ian Grant
On Wed, Sep 17, 2014 at 1:36 PM, Marc Glisse  wrote:
> On Wed, 17 Sep 2014, Ian Grant wrote:
>
>> And is there any way to disable the Intel library?

> --disable-libcilkrts (same as the other libs)
> If it explicitly doesn't support your system, I am a bit surprised it isn't
> disabled automatically, that seems like a bug.

Not necessarily a bug, but it would have been good if the --help
option had mentioned it. I looked, really. Perhaps I missed it though.
So many options for disabling one thing or another 

> Please don't call it "the Intel library", that doesn't mean anything.

Doesn't it? How did you know what 'it' was then? Or is that a stupid
question? This identity concept is much slipperier than it seems at
first, isn't it?

How about my question about the size of the binaries? Is that 60+MB
what other systems show? What is the extra function 4.9 has over 4.5
to which I'm dedicating 50MB of disk? Warning messages?

Ian


Re: Fwd: Building gcc-4.9 on OpenBSD

2014-09-17 Thread Ian Grant
On Wed, Sep 17, 2014 at 2:59 PM, Marc Glisse  wrote:
>>> Please don't call it "the Intel library", that doesn't mean anything.
>> Doesn't it? How did you know what 'it' was then? Or is that a stupid
>> question? This identity concept is much slipperier than it seems at
>> first, isn't it?

> You included error messages...

Context. And this is what gave that noun meaning. Context is important
in semantics. You can't tell what anything, a C compiler binary, for
example, means in isolation.

>> How about my question about the size of the binaries? Is that 60+MB
>> what other systems show?
>
> I still see <20M here, but I don't know if there are reasons for what you
> are seeing. Are you maybe using different options? (debug information,
> optimization, lto, etc)

That is very useful to know. Thanks.

Ian


Re: Fwd: Building gcc-4.9 on OpenBSD

2014-09-18 Thread Ian Grant
On Thu, Sep 18, 2014 at 5:37 PM, Ian Grant  wrote:
>
> On Thu, Sep 18, 2014 at 5:22 PM, Tobias Ulmer  wrote:
>>
>> On Wed, Sep 17, 2014 at 01:26:48PM -0400, Ian Grant wrote:
>> > The reason I'm doing this is that I want to understand why the total
>> > size of the binaries grew from around 10MB (gcc v 4.5) to over 70MB in
>> > 4.9
>>
>> There is indeed a problem with huge binaries on OpenBSD/arm, which I've
>> not yet figured out, but i386/amd64/sparc64 are fine.
>
>
> I don't have huge binaries (c.f. "Buster Gonad and his Infeasibly Large 
> Testicles") on Open BSD. I have them on i686-pc-linux-gnu.
>
> -rwxr-xr-x 1 ian3 ian3  64M 2014-08-03 01:18 cc1
> -rwxr-xr-x 1 ian3 ian3  65M 2014-08-03 01:18 cc1obj
> -rwxr-xr-x 1 ian3 ian3  68M 2014-08-03 01:18 cc1plus
> -rwxr-xr-x 1 ian3 ian3 1.8M 2014-08-03 01:18 collect2
> -rwxr-xr-x 1 ian3 ian3  65M 2014-08-03 01:18 f951
>
>> Are you trying to build gcc from the vanilla sources? If so, you're in
>> for a treat...
>
>
> I didn't know there was chocolate source! Where is it?! And why is it a 
> secret?
>
> Ian
>


Re: Fwd: Building gcc-4.9 on OpenBSD

2014-09-18 Thread Ian Grant
On Thu, Sep 18, 2014 at 5:22 PM, Tobias Ulmer  wrote:
> On Wed, Sep 17, 2014 at 01:26:48PM -0400, Ian Grant wrote:
>> I can compile the first stage OK, and the binaries are quite modest:
>>
>> -rwxr-xr-x  1 ian  ian  17.2M Sep  6 03:47 prev-gcc/cc1
>> -rwxr-xr-x  1 ian  ian   1.2M Sep  6 04:24 prev-gcc/cpp
>> -rwxr-xr-x  1 ian  ian   1.2M Sep  6 04:24 prev-gcc/xgcc
>
> Gcc 4.9 binaries on OpenBSD/amd64 are resonable:
>
> -r-xr-xr-x  1 root  bin11.6M Sep  9 03:02 cc1
> -r-xr-xr-x  1 root  bin15.4M Sep  9 03:02 gnat1
> -r-xr-xr-x  1 root  bin   749K Sep  9 03:02 ecpp

I think we need to be able to explain this. It's an increase of over
60%, I wouldn't expect that to be due to the relative ineffiiciency of
Intel instruction encoding over AMD.  And it is not due to the
inclusion of libsylkrts (it's much easier to say "Intel library", how
many other libraries are there in GCC that were written by Intel?)
because that is not in the stage1 bootstrap.

Ian


Re: Fwd: Building gcc-4.9 on OpenBSD

2014-09-18 Thread Ian Grant
On Thu, Sep 18, 2014 at 6:54 PM, Jonathan Wakely  wrote:
> On 18 September 2014 23:46, Ian Grant wrote:
>> On Thu, Sep 18, 2014 at 5:22 PM, Tobias Ulmer  wrote:
>>> On Wed, Sep 17, 2014 at 01:26:48PM -0400, Ian Grant wrote:
>>>> I can compile the first stage OK, and the binaries are quite modest:
>>>>
>>>> -rwxr-xr-x  1 ian  ian  17.2M Sep  6 03:47 prev-gcc/cc1
>>>> -rwxr-xr-x  1 ian  ian   1.2M Sep  6 04:24 prev-gcc/cpp
>>>> -rwxr-xr-x  1 ian  ian   1.2M Sep  6 04:24 prev-gcc/xgcc
>>>
>>> Gcc 4.9 binaries on OpenBSD/amd64 are resonable:
>>>
>>> -r-xr-xr-x  1 root  bin11.6M Sep  9 03:02 cc1
>>> -r-xr-xr-x  1 root  bin15.4M Sep  9 03:02 gnat1
>>> -r-xr-xr-x  1 root  bin   749K Sep  9 03:02 ecpp
>>
>> I think we need to be able to explain this. It's an increase of over
>> 60%, I wouldn't expect that to be due to the relative ineffiiciency of
>> Intel instruction encoding over AMD.  And it is not due to the
>> inclusion of libsylkrts (it's much easier to say "Intel library", how
>> many other libraries are there in GCC that were written by Intel?)
>
> liboffload might get added soon.

I don't know what that is. I'll look it up later maybe.

>> because that is not in the stage1 bootstrap.
>
> Are you looking at stripped binaries or unstripped?

I don't know. How should I find out, read the Makefile? :-) Doesn't
the stage-1 get stripped? I'm not a GCC developer, I'm a 'user.'

> Have you compared the binaries using size(1) instead of ls(1)?

Yes, they're a lot smaller. Are you suggesting the filesystem size is
just holes in the file? I would want to know what data is in there.
Think of this as a security audit.

Ian


Re: Fwd: Building gcc-4.9 on OpenBSD

2014-09-18 Thread Ian Grant
On Thu, Sep 18, 2014 at 6:54 PM, Jonathan Wakely  wrote:
> On 18 September 2014 23:46, Ian Grant wrote:
>> On Thu, Sep 18, 2014 at 5:22 PM, Tobias Ulmer  wrote:

> Have you compared the binaries using size(1) instead of ls(1)?

Actually, when I look at the output of size I realise I don't know
what it means:

ian3@jaguar:~/usr/libexec/gcc$ size i686-pc-linux-gnu/4.9.0/{cc1,f951}
   text   databssdechexfilename
14965183  23708 74494415733835 f0144b
i686-pc-linux-gnu/4.9.0/cc1
15882830  29264 75083216662926 fe418e
i686-pc-linux-gnu/4.9.0/f951

The phrase "dangerous GNU crap" comes to mind :-)

Ian


Re: Fwd: Building gcc-4.9 on OpenBSD

2014-09-18 Thread Ian Grant
On Thu, Sep 18, 2014 at 8:32 PM, Jonathan Wakely  wrote:
>> ian3@jaguar:~/usr/libexec/gcc$ size i686-pc-linux-gnu/4.9.0/{cc1,f951}
>>text   databssdechexfilename
>> 14965183  23708 74494415733835 f0144b
>> i686-pc-linux-gnu/4.9.0/cc1
>> 15882830  29264 75083216662926 fe418e
>> i686-pc-linux-gnu/4.9.0/f951
>>
>> The phrase "dangerous GNU crap" comes to mind :-)

> If you say so. The size command is older than GNU, or BSD for that matter.

It's OK. A GNU can't be blamed for crapping, it's natural :-).

> Your OS probably has a man page for it.

It does. "Copyright (c) 1991-2013 Free Software Foundation, Inc."
But the man page doesn't tell me what the column headings actually
mean. And even if it did, why should I have to look up the manual to
find out what the headings mean? What's the point of headings? Since
they aren't even aligned, it might just as well leave the out
altogether: they're just a waste of screen space.

But I don't want to argue about GNU crap, it's a natural and
understandable phenomenon, and not particularly interesting. I want to
know what's in the GCC binaries. So let's focus on that.

What was the reason you suggested I look at the output of the size
command? What does that tell me about what is the cause of the  holes
in the file, or the extra padding, or whatever it is you think is the
explanation for this phenomenon?

Ian


Re: Fwd: Building gcc-4.9 on OpenBSD

2014-09-18 Thread Ian Grant
In case it isn't obvious, what I am interested in is how easily we can
know the problem of infeasibly large binaries isn't an instance of
this one:


http://livelogic.blogspot.com/2014/08/beware-insiduous-penetrator-my-son.html

Ian


Re: Fwd: Building gcc-4.9 on OpenBSD

2014-09-18 Thread Ian Grant
On Thu, Sep 18, 2014 at 9:37 PM, Joe Buck  wrote:
> (delurking)

> Ah, this is commonly called the Thompson hack, since Ken Thompson
> actually produced a successful demo:

How do you know Thompson's attempt was the first instance? The
document I refer to in the blog is the "Unknown Air Force Report"
Thompson refers to. It was written by Roger Schell (cc'ed)

> http://www.win.tue.nl/~aeb/linux/hh/thompson/trust.html

> The only way that the Thompson hack can survive a three-stage
> bootstrap is if the compiler used for the stage 1 build has the bad
> code.

This is the overwhelmingly likely (probability 1) case. How else would
the stage-2 and three compilers get the bad code?

> The comparison between stages 2 and 3 require exact match,
> and any imperfection in the object code injection would reveal itself.

How? In the output of a utility, or a system device driver, on a
system booted from a boot loader and using standard libraries such
libc, all compiled by the same bug in the compilers which compiled the
stage 1, 2 and 3 C compilers?

> So, you can build GCC with LLVM or Intel's compiler or Microsoft's or IBM's
> or Sun's, doing cross-compilation where necessary.

Do these compilers all support cross-OS compilation to any OS? It
sounds a bit hard to me. I just can't imagine MS, say, going to a
great deal of trouble to make sure that their compiler targets Linux
and OpenBSD. GCC needs quite a lot of library and OS support, doesn't
it?

People will have to help me a bit with this, I've not yet managed to
cross-compile anything. This thread started because I was just trying
to build gcc from Vanilla gcc-4.9 sources on OpenBSD, and it doesn't
work. See the earlier messages. I was next going to  try to build
gcc-4.9 on OpenBSD, cross-targetting Linux on the same physical
machine (i.e. same CPU) but I don't imagine this will be at all easy,
given I can't even build the vanilla sources. People say there is
chocolate source, but no-one has told me where it is yet!

> The basic idea is:
>
> 1: build gcc with 3-stage bootstrap, starting with a compiler that you
> suspect might be infected.  call the result A.
> 2: do it again, starting with a different compiler that you think is
> independent of the compiler you used in step 1.  call it B.
> 3: compare A to B.  If they differ, you've found something that should
> be investigated.  If you don't, then either A and B are both clean, or A
> and B both have the identical inserted object code. Maybe they have
> common ancestor?
>
> Note that if you build gcc with a cross-compiler the object code will be 
> different.
> You have to use the cross-compiler to build one more time to "normalize":
> GCC 4.9.0 built with GCC 4.9.0 on operating system X should always be
> the same.

Yes, but the problem is when the object code bug is not in the
compiler binaries, it's something injected into the compiler binaries
from the infected ld.so, or glibc, or the IDE disk device driver, and
it infects the source to those programs.

> As far as I know no one has been paranoid enough to put in the time to do
> the experiment on a large scale, and it's harder because you can't build
> a modern GCC (or LLVM for that matter) with an ancient compiler.  But
> you can create a chain: grab an ancient gcc version off a 15-year-old CD,

When did you last try grabbing an ancient gcc off a 15 year old CD and
getting to run on a modern OS? Was it easy?

> and build newer versions with it until you get up  to the present.

And the rest of the chain, are they easier still?

> The result should be byte-for-byte identical with what you get when
>  building the current compiler with a recent version.

And what does that tell me, really?

> If it is, then either the infection is 15 years old or does not exist.

How do you figure that?

>  Try it again by building cross-compilers from a Microsoft system.
> Don't trust Apple, they used to use GCC so maybe all their LLVM
> binaries caught the bug.

Interesting idea.

> BTW, if "size" is reporting much smaller size than the executable
> file itself and that motivates this concern, most of the difference
> is likely to be debug info, which is bigger since gcc switched to
> C++.  Might want to try "strip".

Great. As I said, the exercise we are here engaged in is to convince
as many people as possible that GCC does NOT suffer from this problem
on any OS, either OS, Windows, OpenBSD, FreeBSD, Solaris, or Linux on
any arch., including IBM System z.

So can someone tell me the quickest way to build a new set of
binaries, stripped, or just how to tell whether the stage-1 binaries
are in fact stripped or not?

And can anyone tell me what are the 'non-vanilla' sources?

Ian


Re: Fwd: Building gcc-4.9 on OpenBSD

2014-09-19 Thread Ian Grant
On Thu, Sep 18, 2014 at 10:35 PM, Thomas Preud'homme
 wrote:
>> From: gcc-ow...@gcc.gnu.org [mailto:gcc-ow...@gcc.gnu.org] On Behalf Of
>> Ian Grant
>>
>> And can anyone tell me what are the 'non-vanilla' sources?
>
> "Vanilla source" refers to unmodified source (as distributed on gcc.gnu.org
> for the case of gcc). This is in contrast to modified source from distribution
> for instance that will usually add some patches.

Hi Thomas,

Thanks. But I asked what the non-vanilla sources were.  I know what
the vanilla sources are, because I'm using them! I thought you were
referring to some particular OpenBSD patches that would make it easier
for me to do this. I'm not aware of any: the OpenBSD people have a v.
4.2.1 GCC fork that they use, but it is 4.9 I am interested in
building on OpenBSD, to get a 'cross reference' which I hope might
tell me something about the file sizes I see,

Thanks,
Ian

> Best regards,
>
> Thomas
>
>
>
>


Dijkstra's Methodology for Secure Systems Development

2014-09-19 Thread Ian Grant
t generally understood of acknowledged,
   but my vision of the more detailed structure of that vision was
   still vague. Halfway [through] the multiprogramming project in
   Eindhoven I realized that we would have been in grave difficulties
   had we not seen in time the possibility of definitely unintended
   deadlocks. From that experience we concluded that a successful
   systems designer should recognize as early as possible situations
   in which some theory was needed. In our case we needed enough
   theory about deadlocks and their prevention to develop what became
   known as "the banker's algorithm", without which the
   multiprogramming system would only have been possible in a very
   crude form. By the end of the period I knew that the design of
   sophisticated digital systems was the perfect field of activity for
   the Mathematical Engineer."

[1] Edsger W. Dijkstra. EWD1303

https://www.cs.utexas.edu/users/EWD/transcriptions/EWD13xx/EWD1303.html

[2] Luis Damas and Robin Milner,
Principal Type-schemes for Functional Programs,
In: Proceedings of the 9th ACM SIGPLAN-SIGACT Symposium on
Principles of Programming Languages
ACM, 1982, 202--212.

http://prooftoys.org/ian-grant/hm/milner-damas.pdf

[3] John Harrison, Introduction to Functional Programming.

http://www.cl.cam.ac.uk/teaching/Lectures/funprog-jrh-1996/all.pdf

[4] Edsger W. Dijkstra "The Structure of 'THE'--Multiprogramming System"
Commun. ACM 11 (1968), 5:341–346.

http://www.cs.utexas.edu/users/EWD/ewd01xx/EWD196.PDF


Re: Fwd: Building gcc-4.9 on OpenBSD

2014-09-19 Thread Ian Grant
None of this is useful to me. I'm trying to make a case for why people
should have confidence in GNU software. You are NOT helping me in
that, I assure you,

We need to publish some simple steps that people can take to reassure
themselves that the 64MB binaries that GCC 4.9 produces on Linux
systems are normal and nothing to worry about,

Why is that so hard? Where are the GCC experts on this list. Where are
the people that actually care about the reputation of the FSF?

Ian


On Fri, Sep 19, 2014 at 7:15 PM, Jonathan Wakely  wrote:
> On 20 September 2014 00:01, Jonathan Wakely wrote:
>> On 19 September 2014 16:21, Ian Grant wrote:
>>> Thanks. But I asked what the non-vanilla sources were.  I know what
>>> the vanilla sources are, because I'm using them!
>>
>> The non-vanilla sources are everything else. That should be pretty obvious.
>
> Or as it says in the text you quoted:
>
> "This is in contrast to modified source from distribution for instance
> that will usually add some patches"
>
> Vanilla source == unmodified source
>
> Non-vanilla source == modified source
>
> Any modified source. If OpenBSD modifies the source, it's non-vanilla.
> If Debian modifies the source, it's non-vanilla.
>
> Personally I don't like the terms vanilla and non-vanilla but I think
> their meanings are fairly clear.


Re: Fwd: Building gcc-4.9 on OpenBSD

2014-09-19 Thread Ian Grant
Thanks Andrew!

You get first prize for most informative intelligent answer so far!
Careful, you might get second prize too :-)

The problem is that we need to find a way to tell people _what_ is in
that "dwarf" code. Open BSD's gcc ignores it, prints a warning, and
goes about its business. That's probably why OpenBSD gcc 4.9 binaries
are 17MB against the 64MB compiled by gcc 4.9. But that is a really
fucking big dwarf they're stuffing in threre. What is the data,
really? We can't just say "it's dwarf" because that doesn't really
mean a whole lot, does it?

Thanks again for your helpful response. This is progress.

Ian




On Fri, Sep 19, 2014 at 8:04 PM, Andrew Pinski  wrote:
> On Fri, Sep 19, 2014 at 4:52 PM, Ian Grant  
> wrote:
>> None of this is useful to me. I'm trying to make a case for why people
>> should have confidence in GNU software. You are NOT helping me in
>> that, I assure you,
>
> Again, try stripping out debugging information and look at the numbers
> again.  Or better yet use size printing out all of the sections rather
> than the default output which combines some section and does not show
> the debugging information,
>
> From a different email:
>> > BTW, if "size" is reporting much smaller size than the executable
>> > file itself and that motivates this concern, most of the difference
>> > is likely to be debug info, which is bigger since gcc switched to
>> > C++.  Might want to try "strip".
>
>> Great. As I said, the exercise we are here engaged in is to convince
>> as many people as possible that GCC does NOT suffer from this problem
>> on any OS, either OS, Windows, OpenBSD, FreeBSD, Solaris, or Linux on
>> any arch., including IBM System z.
>
> Then don't use size with the default options but rather with the sysv
> style output (-A) and look at all of the sections.
>
>
>>
>> We need to publish some simple steps that people can take to reassure
>> themselves that the 64MB binaries that GCC 4.9 produces on Linux
>> systems are normal and nothing to worry about,
>
> Debugging information is increasing a lot.  Writing GCC in C++ has
> caused this issue because there is no removing of debugging
> information yet in dwarf2/3/4, I think there is plans for it but I
> can't remember if it made it into dwarf5 or not.
>
> Thanks,
> Andrew Pinski
>
>>
>> Why is that so hard? Where are the GCC experts on this list. Where are
>> the people that actually care about the reputation of the FSF?
>>
>> Ian
>>
>>
>> On Fri, Sep 19, 2014 at 7:15 PM, Jonathan Wakely  
>> wrote:
>>> On 20 September 2014 00:01, Jonathan Wakely wrote:
>>>> On 19 September 2014 16:21, Ian Grant wrote:
>>>>> Thanks. But I asked what the non-vanilla sources were.  I know what
>>>>> the vanilla sources are, because I'm using them!
>>>>
>>>> The non-vanilla sources are everything else. That should be pretty obvious.
>>>
>>> Or as it says in the text you quoted:
>>>
>>> "This is in contrast to modified source from distribution for instance
>>> that will usually add some patches"
>>>
>>> Vanilla source == unmodified source
>>>
>>> Non-vanilla source == modified source
>>>
>>> Any modified source. If OpenBSD modifies the source, it's non-vanilla.
>>> If Debian modifies the source, it's non-vanilla.
>>>
>>> Personally I don't like the terms vanilla and non-vanilla but I think
>>> their meanings are fairly clear.


Re: Dijkstra's Methodology for Secure Systems Development

2014-09-29 Thread Ian Grant
The following is a response to what some may think an implausible
suggestion made here:

http://lists.gnu.org/archive/html/guile-devel/2014-09/msg00124.html

The suggestion is that the system of education has been subverted so
that there are "unknown" physical laws which give "the unseen enemy"
strange powers over the semantics of computer hardware and software.

   http://livelogic.blogspot.com/2014/09/subverting-laws-of-physics.html

I make what I think most people will see to be a convincing argument
that this is in fact the case.


Verifying Toolchain Semantics

2014-10-02 Thread Ian Grant
Dear programming language types,

I wrote this to try once again to explain what is the nature of the
problem that one would have in verifying the integrity of _any_
software toolchain, whether it is aimed ultimately at the production
of other software, or of hardware.

http://livelogic.blogspot.com/2014/10/the-foundation-part-i.html

This three page text is ostensively about verifying the integrity of a
communications link operating over an un-trusted transport layer, but
a compiler is really a type of communications channel.

I am sure everyone still reading this has wondered about the
possibilities of using universal programming languages (universal in
the Church-Turing sense) as communications protocols. For example, one
could establish a point-to-point connection by writing a program which,
when run, output two more programs: one which, when run, outputs a
decoding pad for the next mesage one would transmit over that channel,
and the other the decoder which prints the message text together with
another program, which was the encoder for returning an
acknowledgement. Both endpoints would do this, and so the
programs/messages would be exchanged, with each one encoding the text
of the other.  Then these programs could include decisions not only
about the encoding of data, choice of one-time pads, etc. but perhaps
also the routes of messages, sending different parts via different
trusted routes over similar channels etc. etc. The variations are
endless, and limited only by the ingenuity of the programmers
communicating over those channels.

And really, I sorely pity anyone charged with organising any kind of
surveillance of a group of people who enjoy that sort of
game. Cracking "the code" would be practically impossible, because
there need never be any fixed concrete representation whatsoever of
the fundamental encoding as it is transmitted over the transport
medium: _all_ of the knowledge about the current and future encodings
can be sent over the previous "incarnations" of that and/or another
channel, and the encoding of channels thereby made non-deterministic:
this means that there could never be _in principle,_ any mechanical
process _whatsoever_ which could decode more than a few parts of any
of those messages. After this brief success, the poor would-be spy
would be right back at square one.

What I try to explain here is the essential distinction between what I
call _actual knowledge,_ as opposed to mere _represented knowledge,_
such as a password, or an SSL certificate, or the documentation for
some file format appearing on a web page. The distinction is that only
in the case of actual knowledge does one know _how_ and _why_ one
knows.

The motivation is the idea that by using actual rather than
represented knowledge, it is possible to construct such a trustworthy
system in practice. But there's a catch! The catch is that this will
only work for an organisation whose motives and governance are
completely open and transparent. This is because the technique relies
upon mutual trust, which is something that cannot exist without
openness and transparency. Bad guys just won't get it! To understand
why (in case it is not immediately obvious to you, that is) you will
need to read (or at least think carefully about) about how
error-detection would work in such a system.

The text consists of a title page with the abstract, and two full
pages. So it should be an easy read. I earlier sent out a nine page
document entitled GNU Thunder, in which I attempted to describe what I
consider to be essentially the same idea, but with the emphasis on
compilers and interpreters, rather than communications. The Thunder
text was a concrete suggestion for an implementation. This text
however is more abstract. But these two documents could be
considered to be complementary in two different senses.

I hope everyone enjoys this, and that it stimulates some interesting
thoughts, and subsequent discussion, and that those thoughts are all
good, and the discussion open and transparent. That way we could save
ourselves an awful lot of _really hairy_ metaprogramming!

Please feel free to copy either text and/or this message and pass it
around. Neither of these two texts are copyright, and the more people
that see them the better. Bad guys in particular need to know about
this much more than the good ones do.

Ian