Torture Bill as C Code

Kevin boils down the new terrorist (and others) arrest/detainment/torture bill into a small piece of C code:

if (person = terrorist) {
     punish_severely();
} else {
     exit(-1);
}

There's one obvious error, but there are other problems with the code. Anyone care to comment? (BoingBoing commentary.)

Posted on October 9, 2006 at 3:55 PM • 73 Comments

Comments

zOctober 9, 2006 3:35 PM

Now that I looked at BoingBoing it seems that people missed the fact that it would never exit.

Rob SheinOctober 9, 2006 4:04 PM

Hm. From what I've seen, it seems that the punish_severely() function is unsafe, and contains a media overflow vulnerability. Simply put, apparently if you feed a non-terrorist into the function, the result is a lot of media coverage, which can result in the program hanging while the judicial subsystem says, "Hang on a minute, there..."

MattBOctober 9, 2006 4:13 PM

Given this is C code, the condition "person = terrorist" is an assignment operation, not a logical comparison; it will always evaluate to true (given that "terrorist" is a non-null value), hence everyone is a terrorist.

BenOctober 9, 2006 4:14 PM

As z points out, this is setting "person" equal to "terrorist", not testing equality, but that doesn't seem like an error. They are assuming everyone is a terrorist, otherwise they wouldn't need to watch internet traffic and monitor phone calls without warrants.

RosinanteOctober 9, 2006 4:15 PM

Given the goverment's approach to punish_severly, the fact that everyone is treated as a terrist is not surprising.

QuindarOctober 9, 2006 4:26 PM

The test should use double parentheses to avoid a compiler warning.

Lesson: the government doesn't compile with warnings enabled.

Then again, I suppose we knew that.

MichelOctober 9, 2006 5:02 PM

Assignments return the value being assigned, so apart from doing an assignment instead of comparison (as pointed out this might actually be accurate), if terrorist is the integer 0 or the boolean false, then the terrorist is not even punished.

Interesting that the program would return an error (exit code != 0) if the assignment returns a 0/false value.

kiwanoOctober 9, 2006 5:18 PM

looks accurate enough to me (provided the value of terrorist isn't false); when the government fails to assert that someone it picks up is a terrorist, it will declare itself a failure and end.

quincunxOctober 9, 2006 5:28 PM

There are two many things wrong with it.

As already pointed out, it is an assignment, not a comparison.

But aside from that, it is poor programming practice all around. What type is person and terrorist? Integers?
Is there an objective method for quantifying terrorists?

Would a cowardly terrorist financier rank higher than a law abiding citizen who snaps one day?

Wouldn't most of our political leaders themselves rank the highest? I mean King G.B. has violated 720 (IIRC) federal laws. We will need to come up with a few more conditions that create a double moral standard. I'm sure the legal positivist pointy-headed intellectuals have already worked this out.

One has to assume that 'terrorist' and 'person' are global variables, otherwise punish_severely() would have passed 'person' as a paramater. Then again, the political process is not exactly apt at punishing the right people (look into Drug War). So we can assume that punish_severely() is actually a PRNG with 'person' as the seed.

But the biggest problem of all is the code is ugly. Those curly braces are just not necessary for a single line after a conditional statement.

BenOctober 9, 2006 5:52 PM

Problems with this code:

-There are no requirements or test cases for determining if the code functions as intended

-There are no regression or integration tests to determine whether or not this code is compatable with existing Law (remember, code is law).

-There is no stated code complete date, so the code may be revised at any time.

-There is no version control, so you never know who or what is determining your punishment at any given time.

Stefan WagnerOctober 9, 2006 5:53 PM

Curly braces are convenient, to paste a
cout into the code.
Ah - there isn't cout in C! Well let's take
System.out.println ("punish");
Still wrong?
echo "punish!"
... giving up.

The exit has a bad smell, but it's just a code snipplet.

How about:
if (person == TERRORIST)
It looks like an comparision of a variable to a constant, which isn't very fruitful for further political reasoning.
Instead, a political reasoning is better suited with a lower case terrorist - today terrorists are defined this way, tomorrow that way.

Calling punish_severely() without parameter raises two questions: is 'person' a global variable, such that the function may treat it as terroristic?
That isn't threadsafe.
If 'person' is meanwhile changed by another thread ... -

jmcOctober 9, 2006 6:11 PM

Bruce, as you can see, you shouldn't be asking wether or not a C code snippet is correct.
Now the ghosts that you summoned, (speak: The C-i-haven't-seen-sunlight-in-days-freaks), will never ever leave your blog again.
Some things you just don't do.
Good luck,
jmc

Mike SaxOctober 9, 2006 6:18 PM

Other than the obvious first line, I see two problems: The program has no form of communication to the outside world, and there's no exception handling. :)

TomOctober 9, 2006 6:45 PM


Word is that a modified version (complements of John Yoo) has been developed. Something about sending a SIGMUTILATEGENITALS to persons child processes.

MozOctober 9, 2006 6:46 PM

I'm with NSA - the code correctly reflects the behavior of the US government. Their currently implementation appears to be "we got you, therefore you are a terrorist unless you can show that your terrorist value is zero".

bob doleOctober 9, 2006 6:48 PM

in addition to the other flaws, I saw a new one... punish_severely() doesn't return anything. We're "not getting anything out of it" as it were.

KevinOctober 9, 2006 6:59 PM

Aside from the assignment that we'd hope would actually be an equality comparison:

It should enclosed in an infinite loop, since we're constantly checking everybody over and over again, whether or not we need to.

And it should iterate over the entire set of persons, as there's more than one. Nobody is immune from suspicion.

And exit(-1) isn't really the accurate alternate response. If not terrorist, then suspect_severely(). Who knows, in the next loop, perhaps things will have changed.

Dean HardingOctober 9, 2006 7:10 PM

Who do we punish_severly()?

Obviously not the person, otherwise we'd have passed him (her?) in as a parameter. So it doesn't really matter that the if() is an assignment. We must just punish everybody. Or maybe we just pick a random person and punish them.

ZachOctober 9, 2006 7:12 PM

We also don't know what types person and terrorist are. Given that the author meant comparison, not assignment, if person and terrorist are ints, then the comparison pretty much behaves intuitively. If they're floats or doubles, then you don't really have a good idea if they're equal or not due to potential rounding errors in floating point representation.

Mitch WheatOctober 9, 2006 7:51 PM

According to that C code frgament:

1) Everyone is a terrorist (obviously written by G. Bush); use == (comparison) instead of = (assignment)
2) Who gets punished?
3) exit(-1) would terminate the program, which is probably not the desired intent as there are always more people to test!
4) Also, exit(-1) is being used in the context of success, whereas many OS's expect zero return values to mean success.
5) what about a check for nobody? i.e. person or terrorist == Null

Dean HardingOctober 9, 2006 7:54 PM

> Also, exit(-1) is being used in the context of success, whereas
> many OS's expect zero return values to mean success.

Clearly, if they're not finding any terrorists then the program isn't successful. So I think exit(-1) is the correct thing in this case.

siddOctober 9, 2006 8:32 PM

let us give the author some credit
suppose he knew roughly what he was
doing

what does this code do? it always executes
punish_severely() unless the the quantity
'terrorist' is a (boolean) FALSE or an
(int) zero. in either of these cases, the
code admits failure.

so it might be replaced with

if terrorist
punish_severely();
else
exit(-1);

so, presumably the code has previously
set the variable 'terrorist' to some value
and is checking it before calling the
punish_severely() routine. if the variable
is set to false or zero, it exits. but if the
code is going to exit anyway, why would it
set this variable to false or zero at all ?
why would it not exit on the earlier
assignment ? eg

let us say the variable was set thus
terrorist = terrorist_match(x,y,z....)

why would the terrorist_match function
not exit instead ? so it seems that the
terrorist_match function must return and
some other process must complete before
the code presented.

what could this code be ? well perhaps
punish_severely needs to have a stack
of punishable items set up before being
called to select the next item for
punishment.

no argument is passed to the
punish_severely routine.so perhaps
'terrorist' is a global that the
routine knows about. but that would be
a)inefficient b) perhaps unnecessary

perhaps, every time the value 'terrorist'
is set nonzero or nonfalse, someone
gets punished severely. an efficient
punish_severely() routine might have a
stack of people (or animals... or ...) to
be punished and merely pop one off
the stack and punish it.

i might suggest a similar piece of code

if (might_be_WMD_somewhere)
invade_country();

as you notice, invade_country() takes
no arguments either... so it probably
behaves similarly to punish_severely...
just pop a country off the stack of
invadable oil rich countries and...

i must stop this line of retrograde
analysis. my neuron hurts. my backup
neuron is out drinking.

sidd


False DataOctober 9, 2006 10:06 PM

Assuming punish_severely() decrements the number of people--not unreasonable given § 950i of the bill--the code will terminate only if the number of people reaches zero. The negative exit code suggests the administering process cannot properly sustain its operation if the available pool of potential terrorists empties. Presumably there's a mechanism, not shown in this snippet, to repopulate the pool.

StevenOctober 9, 2006 10:45 PM

This is just classic commentary here. I haven't laughed this hard in awhile. Sigh, I needed that. Thanks everyone.

the other GregOctober 10, 2006 12:27 AM

Now that we have all satisfied our jolly duty ritually to ridicule the threat, we can hunch safely in our dens and not risk doing anything about it.

Swiss ConnectionOctober 10, 2006 1:07 AM

There is another obvious flaw. This code is being made available for peer review, thus it cannot be seriously considered by a government for a production environment.

htougOctober 10, 2006 2:45 AM

the
exit(-1)
call just shows that the US goverment uses VMS to run their security programs.
Quite sensible actually. Security by obscurity and so on... ;-)

NocturnOctober 10, 2006 3:22 AM

"Given this is C code, the condition "person = terrorist" is an assignment operation, not a logical comparison; it will always evaluate to true (given that "terrorist" is a non-null value), hence everyone is a terrorist."

Yes, correct. So what's the error you're talking about, terrorist ;-)

Jamie GordonOctober 10, 2006 3:25 AM

@Erik N

Even if the suspect confesses at the earliest opportunity you've tortured them twice already! Excessive? I hope you're not involved in law enforcement anywhere.

Erik NOctober 10, 2006 4:25 AM

@Jamie Gordon:

I think the rationale of torture is:

"we torture to make them confess that they are terrorists, but that's all right since they are terrorists".

I didn't write the rutine to reflect any personal opinion on the use of torture or my moral standards - but to reflect what seems to be the "correct" application of torture (well in the dark ages).

Clive RobinsonOctober 10, 2006 5:58 AM

Given the mistakes in the earlier parts of the code maybe the

exit (-1);

Was ment to signify removal of the person permanently, After all GWB is from the hanging state and he sure has trouble with what he says / means...

Jurgen VoorneveldOctober 10, 2006 7:38 AM

If we assume that persons aren't instantiated as terrorists than there must also be code running somewhere that turns a person into a terrorist. Therefore there is a race condition. If the turn_terrorist() code runs first everything is ok, but if this code runs first the person is ignored even though it is a terrorist.

AlexOctober 10, 2006 7:45 AM

There is only one equal sign.

if (person = terrorist)

it is asigning the value "terrorist" to "person" variable and the statement will be different than null.

so, every person is a terrorist XD .. good joke!

C GomezOctober 10, 2006 7:59 AM

Cute... and funny. Doesn't seem to apply to the actual text of the bill, however.

Why people think war criminals deserve criminal rights is beyond me.

There is a major difference between a criminal committing theft, murder, rape, etc., and a terrorist whose sole goal is to kill as many of a certain type of civilian as possible just because. This differentiation is extremely important.

To have decided your recourse for whatever wrongs you feel have been done to you is to attack innocent civilians, which is a clear violation of the very Geneva Conventions the bill is implementing, is really just a form of genocide. It's killing people because they are a certain race or nationality. Killing Americans, killing Spanish, killing English. It's wrong... it's outside of civilization's rules.

There is nothing in the world that could have been done that merits specifically targeting civilians for execution, and that is what terrorists do.

Not that we really see much of these supposed terrorists. They are either very stupid or dead or captured. Not much terror going around when you try to attack once in a blue moon.

To say coders or left-brained people don't vote for Republicans is ridiculous. The party has made enough missteps that the pendulum will probably swing to the Democrats very soon, but really what's the difference? Both parties are champions of waste, fraud, and government domination of everything. There's very little I can do about it except try to keep more of my money so I can take care of myself when I need to. Both parties win elections on 'Bread and Circuses', promising what the government will give to you... a system headed for inevitable borrowing and collapse.

Americans have not been taught their civics, and don't mind the federal government's scope is well beyond the simple clauses of Article I, Section 8.

miwOctober 10, 2006 8:37 AM

The exit(-1) part of the code normally indicates that the application has failed. So the program states that all persons become terrorists and get punished or the application fails (presumably because the terrorist accidentally had a value of 0)

AnonymousOctober 10, 2006 9:42 AM

@ C Gomez:

Sub-section ii of the definition of Unlawful Enemy Combatant:

"a person who, before, on, or after the date of the enactment of the Military Commissions Act of 2006, has been determined to be an unlawful enemy combatant by a Combatant Status Review Tribunal or another competent tribunal established under the authority of the President or the Secretary of Defense."

So all it takes to be labeled a war criminal is for a tribunal convened by the administration to call you one. Is that your definition of a war criminal? If you believe that government agencies NEVER make mistakes, i recommend looking into what happened to a gentleman named Maher Arar.

BozoOctober 10, 2006 10:10 AM

@ C. Gomez

Of bread and Circuses, I'd say the Democrats are the party of bread and the Republicans are the party of Circuses. Sure, they'll both spend your money and pocket a cut of it, But spending on Bread like the Clinton Democrats is good for the economy: spending here on infrastructure and people takes advantage of economic multipliers. Spending on Military Circus theater is a drain and a danger, doubly so when we have an arsonist in charge of the fire department,

MiguelOctober 10, 2006 11:52 AM

Does a person need to commit a terrorist act to become a terrorist?

If the answer is yes we have a problem with code as punishment will be a consecuence of their actions. It is ok for them to be punished but it is unfortunate that they already succeeded on their plans. Given that many terrorists are kill by their same actions (i.e. Sept-11) or commit suicide afterwards (i.e. March-11), punishment after the action has been accomplished may be a bit difficult if they are already dead.

Of course their remains may receive some treatment their religions might be against. Though this is more of a warning call for would-be attackers.

If the answer is no they any of us can be punished as alleged terrorists.

A better approach would be to use the function:

if( planning_a_terrorist_atack(person) )

Not sure severe punishment may change that person's feelings (do you remember clockwork orange?).

I am afraid I did not like much of the code, besides the errors other readers pointed out.

@sidd:

Did you intetionally avoid the
exit(); after
invade_country(); ? Is it included on it?

AJMOctober 10, 2006 11:54 AM

"Why people think war criminals deserve criminal rights is beyond me."

Missing the Point, 10 yard penalty, first down.

The point is that the value "war criminal" or "terrorist" is declared and assigned to a person *before* any evaluation takes place.

Criminal rights like the rights to legal council, the right to decline self incrimination, the right to a fair trial, the right to examine and respond to the evidence against them, are all about evaluating the assignment of the value "war criminal," or any other accusation against them.

Otherwise, terrorists are terrorists because it says here that they are terrorists. They don't deserve rights, because it says right here that they are terrorists. Obviously they are all terrorists here because this is where we detain terrorists, and terrorists don't deserve rights. Look if we start giving them rights, then the terrorists win, I mean only the rights of terrorists are taken away, and if they are here they are terrorists, it says so right here. Only a terrorist would question that logic.

C GomezOctober 10, 2006 2:13 PM

@Benny:

Appreciate your giving me something to call you. I'll concede mistakes are made, and it is awful and intolerable. But there is a difference between an enemy combatant and Mr. Arar.

An enemy combatant doesn't represent a standing army of a state, doesn't wear a uniform.

There are clearly, _clearly_ folks who are enemy combatants. Many of them are killing civilians in Iraq and Afghanistan. They have exited human civilization. There is no reason ever to turn your anger on civilians. Put on a damn uniform and attack military targets.

You and I agree about Mr. Arar. That's not enough for me to say there's no way to ever discern an enemy combatant.

And the Supreme Court was right. Congress should have a hand in constructing this important body of law.

@Bozo:
Your theory of Democrats as Bread and Republicans as Circuses is debatable. I reject out of hand that "Clinton Democrats" did any kind of social spending that was good for the economy. I would point to welfare reform as his greatest accomplishment. Surely, we live in a political age where you can expect the other party to support your ideals (broadly speaking), in an effort to retain power and stay centric.

Mr. Schneier forecasts this himself, expecting a Democratic administration more likely to perform an Orwellian overhaul than a Republican one. I tend to agree, given current political state.

The 90s boom was based pure and simple on a massive expansion of the economy powered by the creation of new sectors out of thin air. The only thing Clinton did that had any measurable effect was direct the DOJ to sue MSFT for breakup. Check the economic fundamentals for yourself. It's not a coincidence that the economy began to slow down just then.

Does that mean I think Republicans are great on economic matters? No, not these Republicans. Since 2000, they've not been "classic Republicans", and I can go into a deeper analysis on why. Really, that's getting off topic and not the point.

The point is neither party is interested in solving the problems that plague this country. So I vote with my pocketbook. The more I can keep government out of it, the more I can save for my future. I have to because they aren't doing it for me (and I don't expect them to. Just get out of my way, please).

Fortunately, I realized this enough years ago that I'm pretty well on my way.

@Bozo and @Benny: I appreciate that your responses were insightful and promoted meaningful discourse. Please accept mine in the same tone.

@AJM: You argued a nice straw man. Clearly, it is possible to identify some enemy combatants. You simply say no one could possibly identify enemy combatants, and if they could, they'd simply identify anyone they wish. That's clever, cute, and oh so typical. However, it's quite easy to identify some. For example, terrorists opening fire on Marines in Iraq. Well, you aren't wearing a uniform. You aren't part of an army we can report back to with your name, rank, and serial number. You are fighting illegally, in fact. My moral distaste kicks in when someone attacks civilians in Iraq. That's beyond any form of humanity.

That is also different from the word terrorist, which is not language the bill uses. Determining who is a prisoner of war and who is an enemy combatant is very important, as your rights under the several "Geneva Conventions" make those distinctions as well.

BennyOctober 10, 2006 2:45 PM

@ C Gomez:

Thank you for your response. I agree with your view that attacking civilians is one of the most despicable acts one can commit. My problem with the bill is that, again, it applies not only to PROVEN war criminals/UEC, but everyone SUSPECTED of being such by the government. The two classes are distinctly not equal. The bar set by the bill for labeling a person an UEC is far too low, far too easily abused.

JohnOctober 10, 2006 5:43 PM

What amuses me is the structure of punish_severely()

punish_severely() is a global function that takes no argument, and returns no status back to the caller.

punish_severely() appears to be a continuous process that cares not for specific instances of people, terrorists, or controls..

As far as I can tell, the program works *exactly* as intended.

After all, if there are NO terrorists, there is no need to call punish_severely()

False DataOctober 10, 2006 10:23 PM

Hate to risk mangling a good joke, but it seems necessary to address some of the issues C Gomez raised. Citations are to sections of http://thomas.loc.gov/cgi-bin/query/z?... as engrossed.

Completely aside from questions of principle about whether the United States should be doing this at all, in the language of Crypto-gram, S.3930 replaces the normal decision procedure about whether someone is or isn't guilty with one likely to produce a greater rate of false positives. For example, it restricts the defendant's ability to know the evidence against him (§§ 949d(f); 949j(c), (d)), it allows admission of statements obtained by coercion under certain circumstances (§ 949r(c), (d)), it replaces the jury of peers with one of military officers (§ 948i), reduces preremptory challenges (§ 949f(b)), and allows only restricted appellate review of decisions (§ 950g).

Furthermore, to say these people are terrorists or war criminals is inaccurate. Until you try them and find them guilty--that is, until the decision procedure produces a positive result--you don't know whether they're bad guys or innocent. If the tribunal returns a positive result, but a standard criminal trial would return a negative result, well . . . I'll leave it to you to decide what that means.

Finally, S.3930 allows the executive branch--not the judiciary--broad discretion to apply this new decision procedure. It applies to any non-US citizen (§§ 948c; 948a(3)) who is an "unlawful enemy combatant". There are two ways to be an unlawful enemy combatant. First, you can engage in hostilities against the United States or one of its allies (§ 948a(1)(i)) without being a lawful enemy combatant (§ 948a(2)). A lawful enemy combatant, roughly translated, seems to mean someone in uniform. Or second, even if you don't engage in hostilities, or, presumably, even if you were in uniform, any "competent tribunal" that either the President or the Secretary of Defense establishes can decide you're an unlawful combatant anyway. (§ 948a(1)(ii)) I don't know whether declaring a citizen an "unlawful enemy combatant" has any legal consequences, but if so, they'd be outside S.3930 because military tribunals have jurisdiction only over alien unlawful enemy combatants. (§ 948c)

AJMOctober 10, 2006 11:24 PM

@ C Gomez

"Clearly, it is possible to identify some enemy combatants. You simply say no one could possibly identify enemy combatants, and if they could, they'd simply identify anyone they wish."

Ten points deducted for missing the point again. Ten additional points deducted for reading the the phrase "no one could possibly identify" into what I wrote.

The point, broken into two simple component parts is as follows:

Given: Someone (whether appointed, elected, or simply government employed) makes an assertion that a person in custody is an enemy combatant (fine, correct me on the use of "terrorist" on principle, you started it with "war criminal").

Your assertion: "Why people think war criminals deserve criminal rights is beyond me."

From this I assume that you mean (feel free to correct my error if you meant some other criminal rights, or you meant that rights are revoked after a fair trial that includes these rights):
"Criminal rights" equals some or all of the following: "rights to legal council, the right to decline self incrimination, the right to a fair trial, the right to examine and respond to the evidence against them, are all about evaluating the assignment of the value "war criminal," or any other accusation against them."

I conclude from your statement that you mean to say it is unthinkable that the afformentioned criminal rights should be given to someone who is detained as an enemy combatant (or substitute various other euphemisms for the same thing).

I assert that this is incredibly intellectually lazy.

Such a system is fundamentally broken.

The initial assumption that the detainee is in fact an enemy combatant or other euphemism has been asserted with no oversight, no check, no balance, and no hearing is an entirely broken process. It is not a matter of whether someone *can* tell or not, it is the matter that you would just accept that someone (presumably with authority) asserted that the person is a terrorist and is not required to give proof. For that matter, who makes that assertion and how they are even vetted as competent to make that decision is not defined.

Being in the government or the military does not make humans immune to poor judgement, alterior motives, corruption, or simple error. In fact, due to stress and confusion, humans are most prone to such errors on the battlefield.

I agree entirely that combatants who hide among the civilian populous are foul and evil human beings who cause not only direct harm to their targets, but intentionally encourage additional harm to innocents by those who attempt to defeat them. In my view such enemy combatants should be executed.

The point you miss is that an assertion that someone is an enemy combatant does not mean that they are.

Think of it in Alice, Bob, and Trent terms for a second instead of starting with the assumption "they are war criminals." If you attempt this exercise for a moment, you will see that there is no trust model at all. There is no single point of responsibility or accountability for the accusation of "enemy combatant" status. No one will pay for a mistake and there is no rigour to how the accusation is made.

Trials and evidence are not luxuries that should only be permitted for captives who are accused of crimes that you don't find as morally distasteful. If anything, your arguments on the matter reenforce my position that enemy combatants *must* be tried properly with "criminal rights." Clearly those close to the matter do not have sufficient perspective to be objective.

Clive RobinsonOctober 11, 2006 2:45 AM

@C Gomez, AJM

Ever looked the "witch trials" (EUrope and America), it had a nice simple proces,

1, somebody accused you for whatever reason of being an instrument of the devil etc.

2, There was an ad-hoc hearing to decide if the accusation had merit. If it was decided there was merit you where put to trial by a test.

3, You where found guilty by surviving the test which was concidered to not be survivable by a normal person.

Having been found guilty you where usually killed in an entertaining way for the public.

The normal method being burnning alive, which could be made to last for some considerable period. In fact it was considered the more you screamed the more the devil was being tourtured. Also to hear the screams was to have your soul cleansed, so a good turn out of the local populace was encoraged (especially as only an instrument of the devil would not attend, and therefore qualify as the next entertainment).

So all around a win win process for the accusor the self apointed "forces of God" and free entertainment for everybody else...

The majority of the witches would appear from the records to be the old, the ugly, and those suffering from idiocy, plus a few others who had no doubt upset somebody in authority.

Oh and an easy way to upset somebody in authority was to try and help somebody who was under the "Curse of God" or as we would more correctly call it these days "ill".

It is possibly why we have the expression "witch hunt" in the common parlance for an unjust and unfair process being brought to bear on an individual.

As people are often heard to remark "it was oh so much simpler in the past".

If you want to partake of the fun try the interactive Salem Witch Trials,

http://plasma.nationalgeographic.com/features/97/...

CharlotteOctober 11, 2006 2:40 PM

Y'all seem to be from the reality-based community, a group that has pretty much been deemed irrelevant to any policy decisions of this administration, or its pet Congress.

MiguelOctober 13, 2006 5:40 AM

Two days ago there was this news of a Spanish woman detained by Mexico police because she was carrying some bullets on her check-in baggage.

She went to Riviera Maya to spend her honeymoon with her husband. No intelligence signals her a terrorist, it might has been just a bad joke or someone trying to put her in trouble. I do not know.

Should the mexican officials start the severe punishment just in case?

WLOctober 15, 2006 4:03 PM

Any particular reason that we're not testing whether punish_severely() had any effect (return code)?

Oh, never mind. We're talking the US here. No question will be asked about the effectiveness of measures.

Eric NormanOctober 15, 2006 5:24 PM

Oh, for Pete's sake. Nobody has even mentioned the obvious error yet! The blatant and obvious error is that it's written in C; it should be written in Prolog.

BogwanOctober 16, 2006 7:10 AM

H.R.6166 is the worse kind of law. It is a compromise that cuts a road through the law. We have a Congress of "Ropers".

The following is quoted from the movie "A Man for All Seasons" (1966).

William Roper: So, now you give the Devil the benefit of law!
Sir Thomas More: Yes! What would you do? Cut a great road through the law to get after the Devil?
William Roper: Yes, I'd cut down every law in England to do that!
Sir Thomas More: Oh? And when the last law was down, and the Devil turned 'round on you, where would you hide, Roper, the laws all being flat? This country is planted thick with laws, from coast to coast, Man's laws, not God's! And if you cut them down, and you're just the man to do it, do you really think you could stand upright in the winds that would blow then? Yes, I'd give the Devil benefit of law, for my own safety's sake!

Nathan JonesOctober 16, 2006 11:40 PM

punish_severely() is a black box.

Putting coding errors aside, the problem I have with this code is that we can't see inside the punish_severely() function. Submit a FOIA request to see the function and you'd be lucky to get a page full of blacked-out text. What controls do they have in place? What happens to person inside that function?

MarkOctober 17, 2006 8:41 AM

I'm sure the point here isn't that the poor code means that everyone gets punished as a terrorist, but that the bill punishes everyone regardless of their terrorist status. Presumably that's why punish_severely takes no argument...

dudeOctober 20, 2006 4:56 AM

I was scared at first, but then i realized
that because punish_severly() takes no arguments, it can only punish global
terrorists, not local terrorists. So even though person is being mistakenly assigned to the value of a terrorist (not a pointer to a terrorist) no matter how you define terrorist, person will not be punished, (unless they are a global person). I feel safer already.

Doug RossOctober 21, 2006 2:20 PM

No one has speculated on the ramifications of:

if (terrorist == person) {
waterboard_for_more_information();
} else {
exit(-1);
}

which appears to be the algorithm for exploiting known terrorist Khalid Shaikh Mohammed, et. al. The apparent result: useful intelligence that was employed to deter other attacks.

I am neither condoning nor condemning, but it's pretty clear it needs to be discussed.

jaredNovember 1, 2006 6:42 PM

silly rabbit.

person, terrorist, and punish_severely are each preprocessor macros.

clearly this program prints itself out, then allows the user to play ascii tetris.

FrodeNovember 3, 2006 5:24 PM

focusing on the problems of punish_severely...

To the layman this might satisfy his bloodthirst for getting back at the terrorists - yeah, we'll kick their b...
The released open source code is however only political propaganda showing what the author wants you to think he intends to do.

The implementation of this function has not been released in the open domain - we do not know how the punishment is carried out, when, to what extent, nor do we know who is punished, and to that effect not even how many, or if it has any undisclosed side-effects. Run once, this function might at first opportunity, first test decide to give it in to your friends, family, way of life, or the whole of society. In a democracy (or well behaved program), the function ought to have a contract with the other people (or here, globals) in terms of what, why and to whom it intends to act upon.

Neither does the function indicate any intent of implementing any comprehensive strategy for dealing with terrorists beyond revenge. We do not know which criteria has decided that a person is a terrorist (assuming there is a choice in the implementation of the botched comparison), and at what stage this was determined (can a person be accused or suspected of terrorism, involuntarily linked, or are they all terrorists regardless - black'n'white). Surveillance, sting operations, interrogation, gaining useful information from the terrorist appears absent, and worryingly unimportant. Nothing is returned by the function and I would assume if there was any attempt to gain information in the implementation, the presumed authors (government) would do its utmost to shield (encapsulate) this information from other presumed terrorists as well as citizens (though they probably lost out on this when they chose C as their political platform).

Hopefully, a few rounds of reviews and critique will add the necessary contracts, pre- and post-conditions, as well as define and declare the invariants upon which we're not willing to compromise in this implementation.

Leave a comment

Allowed HTML: <a href="URL"> • <em> <cite> <i> • <strong> <b> • <sub> <sup> • <ul> <ol> <li> • <blockquote> <pre>

Photo of Bruce Schneier by Per Ervland.

Schneier on Security is a personal website. Opinions expressed are not necessarily those of Co3 Systems, Inc..