
« Apache vs Yaws · Spoof signs » A succinct interview with Chomsky , touching on the morbid state of democracy in the USA , the " War on Terror " , Iraq , oil , all the usual stuff ... Some very interesting ( but short ) comments on China towards the end as well . Now let 's talk about withdrawal . Take any day 's newspapers or journals and so on . They start by saying the United States aims to bring about a sovereign democratic independent Iraq . I mean , is that even a remote possibility ? Just consider what the policies would be likely to be of an independent sovereign Iraq . If it 's more or less democratic , it 'll have a Shiite majority . They will naturally want to improve their linkages with Iran , Shiite Iran . Most of the clerics come from Iran . The Badr Brigade , which basically runs the South , is trained in Iran . They have close and sensible economic relationships which are going to increase . So you get an Iraqi/Iran loose alliance . Furthermore , right across the border in Saudi Arabia , there 's a Shiite population which has been bitterly oppressed by the U. S . - backed fundamentalist tyranny . And any moves toward independence in Iraq are surely going to stimulate them , it 's already happening . That happens to be where most of Saudi Arabian oil is . Okay , so you can just imagine the ultimate nightmare in Washington : a loose Shiite alliance controlling most of the world 's oil , independent of Washington and probably turning toward the East , where China and others are eager to make relationships with them , and are already doing it . Is that even conceivable ? The U. S . would go to nuclear war before allowing that , as things now stand . 