2007-05-22
Compiling a Nation
Today I have an interesting analogy. This is one of these concepts I have in my head, and I have hitherto assumed everyone else had, but I have since learned not to make such assumptions, and to instead begin the laborious process of teaching people how to think.
Anyway, in computing there is a language called "C", which is basically the equivalent of "English". It is ubiquitous. Every platform on the planet has a C compiler available. However, there are still some companies where you won't actually find it installed, because it costs money, and on an IBM mainframe, that can be a lot of money, when it is not a commonly-used language. For most people, there is a free compiler called "gcc" available, so they can use that rather than have nothing. Except for IBM mainframe users. Who up until very recently (2004) had no free C compiler available to them, and could have been in a position of having to write code in a non-standard language instead.
IBM mainframes were the last unconquered territory. I used to work on IBM mainframes and I know what it's like to not have a C compiler available. It's tragic. So, for decades I dreamt that one day we would get a free C compiler on the mainframe, so that the world would be safe for C programmers. That day came in 2004. There's been a lot more work done since then, and the project (GCCMVS) is now in sourceforge and a new release is expected imminently (there's just some bug in VM being ironed out by someone else at the moment - but we're talking weeks to a month or so). The new compiler is about 3 meg in size. On MVS 3.8 there's about 9 meg in total available to the user.
Anyway, to get a compiler that is native to MVS, you need to have a tool to build it. The gcc C compiler is actually written in C itself. Therefore, to the tool you need is another C compiler! What this means is that in order to build gcc native to MVS, there is a 3 stage process.
Stage1: Compile gcc using some other C compiler (or a cross-compiler).
Stage2: Compile gcc using the output of stage1.
Stage3: Compile gcc using the output of stage2.
stage2 and stage3 need to be confirmed to be identical. Once they are confirmed identical, it means that the stage2 compiler is a native MVS compiler, and it has the ability to rebuild itself if you want to make improvements to it. It is totally "clean". It no longer has any relation to the original compiler used to build stage1.
Now let's look at the cleanliness of Iraq.
The one thing America didn't want to do was to force anything down the throats of the Iraqi people. All they wanted to do was to stop Saddam or anyone else from forcing something down the Iraqi people's throats, and see what the Iraqis came up with of their own free will. However, that's quite a difficult feat to accomplish. Because the US was bound by the Geneva Convention and had become an occupying power. Iraq was technically under US military rule. That was technically the situation, but what did America actually DO?
The first thing they did was get together the Iraqi exiles who had wanted to replace Saddam with a democracy, and sat them down into a Governing Council. No-one knew what these autonomous actors were going to come up with, but they weren't technically given any power. They were just an advisory committee. And they weren't meant to have anything to do with security. However, the US did exactly the right thing, and deferred to them on all matters. The IGC didn't do anything particularly bad. They made up crap about US forces killing women and children in Fallujah, and they stopped the Turks coming in to help, but nothing that did any real damage.
These people then went on to form the Interim Government, and Iraq technically became sovereign. Although the fact is that the US military could have toppled them anytime it wanted, just as it could do in Zimbabwe at any time it wanted. But that's completely irrelevant. The fact is, Iraq was sovereign. Not only that, but the IIG was a group of people who were willing to give Kurds independence, and they made that official. So the Kurds now know that it is only the Turks that are stopping them from being independent, they've already got the green light from the Arab Iraqis.
The next step was that the IIG set the rules for elections for a Transitional Government, which would in turn create an constitution. This was also done. And then the Iraqi people voted on that constitution and had the ability to veto it. They didn't. They overwhelmingly approved it. And then finally they elected a new permanent government based on that constitution.
And the moment that was done, we had the equivalent of a stage3 compiler. Every scrap of Iraq's government is now totally native. The constitution was voted for by the Iraqi people, and the government was elected totally by Iraqis based on the constitution that they themselves chose. America didn't have a damn thing to do with any of that, even though it kickstarted the initial process.
That means that the US has *NO* responsibility for anything in Iraq that anyone doesn't like. If you have any complaints, you need to take it up with the Iraqi people. The 300+ parties that they chose from were a totally autonomous Iraqi phenomenon. The US didn't create or back a single one of them. The most you had was some US blog readers financially supporting one party created by some Iraqi bloggers. That party got nowhere though. A great disappointment for me personally. The Iraqi people certainly didn't live up to the hopes I had regarding them, but it's not the end of the world. What they came up with on their own was interesting too, and we now at least have a starting point to try to figure out how to make the Iraqis "normal".
But what I'm very happy with is the PROCESS that the US has used to ensure that they're not forcing anything onto the Iraqi people. They have deliberately withheld from doing anything at all. If the US had done ANYTHING, it would have spoiled the experiment. We wouldn't have found out what the Iraqi people would do of their own free will. Now we know, and we can take appropriate action. Iraq is as clean as GCCMVS running on 31-bit MVS.
UPDATE: I've gone back and answered all the old comments as well, back to 2007-04-22 when I ran out of time. There might be another pause before I answer the answers to the answers though.
|
Anyway, in computing there is a language called "C", which is basically the equivalent of "English". It is ubiquitous. Every platform on the planet has a C compiler available. However, there are still some companies where you won't actually find it installed, because it costs money, and on an IBM mainframe, that can be a lot of money, when it is not a commonly-used language. For most people, there is a free compiler called "gcc" available, so they can use that rather than have nothing. Except for IBM mainframe users. Who up until very recently (2004) had no free C compiler available to them, and could have been in a position of having to write code in a non-standard language instead.
IBM mainframes were the last unconquered territory. I used to work on IBM mainframes and I know what it's like to not have a C compiler available. It's tragic. So, for decades I dreamt that one day we would get a free C compiler on the mainframe, so that the world would be safe for C programmers. That day came in 2004. There's been a lot more work done since then, and the project (GCCMVS) is now in sourceforge and a new release is expected imminently (there's just some bug in VM being ironed out by someone else at the moment - but we're talking weeks to a month or so). The new compiler is about 3 meg in size. On MVS 3.8 there's about 9 meg in total available to the user.
Anyway, to get a compiler that is native to MVS, you need to have a tool to build it. The gcc C compiler is actually written in C itself. Therefore, to the tool you need is another C compiler! What this means is that in order to build gcc native to MVS, there is a 3 stage process.
Stage1: Compile gcc using some other C compiler (or a cross-compiler).
Stage2: Compile gcc using the output of stage1.
Stage3: Compile gcc using the output of stage2.
stage2 and stage3 need to be confirmed to be identical. Once they are confirmed identical, it means that the stage2 compiler is a native MVS compiler, and it has the ability to rebuild itself if you want to make improvements to it. It is totally "clean". It no longer has any relation to the original compiler used to build stage1.
Now let's look at the cleanliness of Iraq.
The one thing America didn't want to do was to force anything down the throats of the Iraqi people. All they wanted to do was to stop Saddam or anyone else from forcing something down the Iraqi people's throats, and see what the Iraqis came up with of their own free will. However, that's quite a difficult feat to accomplish. Because the US was bound by the Geneva Convention and had become an occupying power. Iraq was technically under US military rule. That was technically the situation, but what did America actually DO?
The first thing they did was get together the Iraqi exiles who had wanted to replace Saddam with a democracy, and sat them down into a Governing Council. No-one knew what these autonomous actors were going to come up with, but they weren't technically given any power. They were just an advisory committee. And they weren't meant to have anything to do with security. However, the US did exactly the right thing, and deferred to them on all matters. The IGC didn't do anything particularly bad. They made up crap about US forces killing women and children in Fallujah, and they stopped the Turks coming in to help, but nothing that did any real damage.
These people then went on to form the Interim Government, and Iraq technically became sovereign. Although the fact is that the US military could have toppled them anytime it wanted, just as it could do in Zimbabwe at any time it wanted. But that's completely irrelevant. The fact is, Iraq was sovereign. Not only that, but the IIG was a group of people who were willing to give Kurds independence, and they made that official. So the Kurds now know that it is only the Turks that are stopping them from being independent, they've already got the green light from the Arab Iraqis.
The next step was that the IIG set the rules for elections for a Transitional Government, which would in turn create an constitution. This was also done. And then the Iraqi people voted on that constitution and had the ability to veto it. They didn't. They overwhelmingly approved it. And then finally they elected a new permanent government based on that constitution.
And the moment that was done, we had the equivalent of a stage3 compiler. Every scrap of Iraq's government is now totally native. The constitution was voted for by the Iraqi people, and the government was elected totally by Iraqis based on the constitution that they themselves chose. America didn't have a damn thing to do with any of that, even though it kickstarted the initial process.
That means that the US has *NO* responsibility for anything in Iraq that anyone doesn't like. If you have any complaints, you need to take it up with the Iraqi people. The 300+ parties that they chose from were a totally autonomous Iraqi phenomenon. The US didn't create or back a single one of them. The most you had was some US blog readers financially supporting one party created by some Iraqi bloggers. That party got nowhere though. A great disappointment for me personally. The Iraqi people certainly didn't live up to the hopes I had regarding them, but it's not the end of the world. What they came up with on their own was interesting too, and we now at least have a starting point to try to figure out how to make the Iraqis "normal".
But what I'm very happy with is the PROCESS that the US has used to ensure that they're not forcing anything onto the Iraqi people. They have deliberately withheld from doing anything at all. If the US had done ANYTHING, it would have spoiled the experiment. We wouldn't have found out what the Iraqi people would do of their own free will. Now we know, and we can take appropriate action. Iraq is as clean as GCCMVS running on 31-bit MVS.
UPDATE: I've gone back and answered all the old comments as well, back to 2007-04-22 when I ran out of time. There might be another pause before I answer the answers to the answers though.