- D2-D4 G8-F6
- C2-C4 E7-E6
- G1-F3 B7-B6
- B1-C3 F8-B4
- C1-D2 C8-B7
- E2-E3 E8-G8
- F1-D3 D7-D6
- A2-A3 B4-C3
- D2-C3 F6-E4
- A1-C1 F7-F5
- E1-G1 B8-D7
- D1-E2 D8-F6
ABCDEFGH
--------
|r rk |8
|pbpn pp|7
| p ppq |6
| p |5
| PPn |4
|P BBPN |3
| P QPPP|2
| R RK |1
--------
<@CrackMonkey> it just seems like some simple person is shouting the bible at me with a bad accent
<@CrackMonkey> KAI ANEKALESEN MWUSHN KAI ELALHSEN KURIOS AUTW EK THS SKHNHS TOU MARTURIOU LEGWN
(Nick, on finding a beta code version of the Septuagint in my
home directory)
The verse Nick quotes is Leviticus 1:1 (Septuagint). "And the Lord
called unto Moses, and spake unto him out of the tabernacle of the
congregation, saying" (KJV).
I was complaining the other day about software portability (for one
thing) and a lack of development environment and operating
system standards (for another).
- Item. I can't compile the Bootable Business Card on Linux
on an Alpha machine.
- Item. I can't compile the Bootable Business Card on FreeBSD
on an i386 machine.
- Item. I can't even compile the Bootable Business
Card on Red Hat Linux (as opposed to Debian GNU/Linux).
- Item. I can't even compile the Bootable Business
Card on Debian GNU/Linux if a slightly different selection of
-devel packages is installed from the selection on our development
machine!
- Item. I can't even think of compiling the Bootable Business
Card on MacOS 9.
Why should this be? Isn't libc specified by POSIX, documented by
Kernighan and Ritchie and ANSI and in the Stevens book and so on?
Aren't the APIs and ABIs well-defined?
Well, it turns out that
- compiler flags differ from compiler to compiler
- ABIs are not stable (or portable)
- cross-compilers are missing
- cross-compilers are not invocation-compatible with native compilers
- kernels and system utilities are OS-specific
- ioctls, syscall numbers, syscall calling conventions, and
even syscall parameters are OS-specific
- boot sequence is OS-specific
- hardware support is OS-specific
- filesystem layout is OS-specific
- some software and some file formats are endian-specific
- APIs change per library version
- device major/minor numbers and naming conventions are OS-specific
- syscall semantics are OS-specific
- support for particular subsystems (like pthreads, or maybe a driver
like tmpfs or cloop) will not be consistently implemented and will be
OS-specific
This is just the beginning. But this situation seems ridiculous,
because compiling is a highly deterministic function. In a
clearly-defined language and environment, you would expect to be
able to call, in effect, a "compile" function on some source code,
and get back some object code. You need to tell the compile function
what the source language and target machine architecture will be,
but in principle it can be implemented on any platform.
But, of course, that's not what ever happens (except possibly in
closely-specified languages which compile to bytecodes, like
Java or Python). In some sense the Babel of incompatible and
non-portable languages is a result of a lack of standards, and a
lack of adherence to existing standards. In another sense it has
to do with the insularity of adherents of the respective platforms.
Users of a platform tend to focus on being able to build native
code well according to the conventions of each platform.
Cross-compilers are traditionally an afterthought. And there's
little hope that Mac developers would put a high priority on
being able to cross-compile Linux sources for Linux, or Windows
sources for Windows.
There are so many other factors which hinder portability of source
code itself. Platforms are likely to provide useful (but
platform-specific) libraries, which then tend to get used by
programmers. This is especially true in the GUI world, where there
are so many platform-specific graphics and UI libraries with completely
divergent object models and APIs and even basic concepts.
Portability is even lacking where you would expect to find it, within
the Unix world and what gets called "ANSI C". Just take a look at
a ten-year-old Unix application. I know I've been looking at a lot
of them recently.
What would it take to develop languages, platform models, and
development environments where compiling really did mean
calculating a particular well-defined function?
The HP/Snosoft
affair
reflects poorly on the New HP.
I got one of my antique ammeters to measure the current used by a
halogen lamp (one amp). From now one, I should call it the "amp lamp".
The meters hadn't been used for years, and seem to be sticky or rusty
internally, and not very sensitive.
As
this began to play, I heard the
Noe Venable
lyric "mama, oh mama, we're spinning around". What a fine co-incidence
(and fine movie and fine song).
In a larger sense, while academics have slept, the content industries
have systematically stifled flows of essential information, created
artificial scarcity, and made certain areas of basic research
potentially illegal.
(Siva)
But, says Chuck Sims,
they
have not done so by diminishing fair use rights.
I had a visit from Lucky and a visit from Annalee and Jesse and talked
to all of them about trusted computing.
I'm
famous, and I'm
off to DEF CON X.