Legal Code In a Version Control System?
coldmist writes "Sen. Thomas Carper (D-Del.) is on the Senate Finance Committee, which just finished work on the health care bill. The committee recently rejected an amendment which would have required them to post the legislation for public viewing for 72 hours before it went to final vote. Several senators felt that the actual legal code would be too cryptic and complicated to be useful. Carper himself said, 'I don't expect to actually read the legislative language because reading the legislative language is among the more confusing things I've ever read in my life.' So, why don't they put it in SVN (or some similar version control system) where people can tkdiff the changes (i.e. new legislation is in a branch) or output a patchset? If a bill is passed, it's merged into the trunk. It just seems so logical to me, yet I can't find any mention of doing this on the web. What do you think?"
The idea is fine and good, but the system probably runs too far behind everything else to take this up for some years to come.
Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.
CHANGE THE LAW. Keeping the bible in Latin worked only for the priests and keeping the law in legal speak is working only for the lawyers.
If you can't convince them, confuse them. -- Harry Truman
Generally, if you want to learn the content of a bill, you can read the plain language version that's passed out of committee. That's the version that matters, that's the version that the members of Congress read, and that's the version that's controlling. The version of the bill that's translated is the legislation that is passed on. If that does not match up with the intent from the committee, then it is corrected to match the plain language version.
And as for whether some sort of tkdiff makes sense, maybe it does, but really for only a select few people who actually are writing and or editing the bills. Of course, if there was something free and open to the public, that wouldn't be a bad thing either. But generally, there's just not a whole lot of demand.
I have built a version controlled document management system around mercurial for my wife's architectural practice. I have found it very difficult to convince users to follow the conventions we use for software. They are too used to putting version and project information in file names. It means nothing for them to rename a file from a.dxf to a_new.dxf and commit it.
The formal structure of software tends to keep this behaviour in check. The environment we are talking about here may be formal and controlled enough for this to work, but it is going to take training and enforcement to get it to work.
http://michaelsmith.id.au
As PJ (over at Groklaw) likes to say, law is squishy.
Source code and law look a lot alike, but we have to remember that law is squishy.
We also should remember that lawyers are often seeking for an advantage for their clients (or constituents). This seeking for advantage runs counter to the work patterns of many of us who deal with free/open source stuff, but it is quite common in the legal world.
It would be a great tool for legislators who want the law to make sense, but such are too rare. The others would quickly find ways to pervert the tools.
Computer memory is just fancy paper, CPUs just fancy pens with fancy erasers; the 'net is just a fancy backyard fence.
Or, if you want to think the worst - perhaps those drafting the laws (frequently not those voting for them) don't want it to be easy to tell what changes a given law will introduce.
The complexities take power away from judges, I suppose, but then they put the power in the hands of the lawyers, who have to interpret the laws for the judges.
I prefer keeping the law simple and being able to recall judges who get out of control.
Injustices are going to happen anyway, the only way to deal with that is to learn rudimentary social skills, so you can get others to help you correct them. (Or am I being unreasonably idealistic in asking that?)
Computer memory is just fancy paper, CPUs just fancy pens with fancy erasers; the 'net is just a fancy backyard fence.
... don't expect to actually read the legislative language ...
If United States Senators can't be bothered to read and comprehend the legislation they're voting on, then:
(1) why are they elected to posts that, as the most basic of job requirements, requires the ability to do so, and
(2) why haven't they been removed from office for complete and utter failure to serve the American people?
That's right, folks... your elected officials are attempting to pass legislation that will have massive consequences for our generation and several more to come, without having actually read the material they're about to vote on. Here's the best part: this is nonthing new. It's been the status quo for a huge chunk of Washington's electoral finest for longer than I've been alive. Outstanding work!
512 MB RAM, 20 GB disk, 200 GB transfer, five datacenters. $19.95/month.
Legal code these days is the equivalent of assembly language, it's complicated but it describes on a low-level what has to be done. While it's fine and dandy, the problem these days is that too much code is produced. Hence I propose that we make a GCC-Legalese or LLVM-Legalese fork so that we can -Os legislation. Better yet, we could simply write law in a higher level language, intent, and the compiler's intent preprocessor would turn that into faithful lower level code.
I also propose that we start forking Valgrind as to automatically find legal loopholes, conflicts and grey areas before a law is passed. Finally I think we should rewrite common law in Objective-Law++ so we can benefit from the many advantages offered by objection-oriented law over procedural law. Any thoughts on Convict Collection?
You just got troll'd!
A few thousand people in the whole world can really understand the source code of the linux kernel. Why would Linus make it so complicated? Is this "openness" just another prank? No, some things are complex. To make laws is a highly complex issue, Of course, there are many problems with the processes of law making - but just simplyfying the language would not do any good.
1. There's an enormous amount of existing code. Look at how much Slashdot talks about COBOL, which is around 50 years old. In common law countries (eg Britain, the USA and Australia), the law has code nearly a millennium old, written in a variety of languages.
2. Corner cases. There are lots of these. Much like software, they are usually discovered in "maintenance mode"; ie after the law is passed. As time goes on, legal draftsmen begin to include lots of standard boilerplate, which will only rarely actually be applied.
3. Legal draftsmen. Never heard of these? Who do you think actually sits down and writes the law? It's not the politicians. They give drafting instructions, which are translated into legalese.
Expecting politicians to read and comprehend legalese is a bit like expecting businessmen to read and comprehend assembler. It will never, ever happen. The idea of "plain english" law is a lot like "automatic programming". A total pipedream that will never happen.
The law is a semi-structured language. You can think of it as a distributed rule system created by a mix of engineered modules (Acts of Congress / Parliament) and reverse engineering.
The reverse engineered parts are case law. Lawyers feed in black-box test cases, then carefully record what the CPU (the judges) output. Over time they map out what the law "is". The reason legalese repeats the same phrases over and over again is because they have been proved, in court, to have specific and reliable semantics. "It ain't broke", so to speak.
I personally think there's enormous scope for borrowing software engineering practice and tools for legal drafting, but it's no panacea. I even used to think that we could treat legalese as a kind of assembler and develop a higher level language that "compiles down" to it. But it doesn't solve the problem, just moves it around.
Laws are flawed and problematic because they deal with humans. Humans who are complex and motivated and intelligent. No purely rule-based system will ever completely tame human ingenuity, just as no code will ever fully describe all subject domains.
Disclaimer: I used to be a law student, until I came to my senses.
Classical Liberalism: All your base are belong to you.
So if he won't read the legislation, and says he can't understand it, why the fuck is he on any committee that is tasked with looking at specific pieces of legislation?
It would be sad, if it was not such an obscene state of affairs. Yet, it is a general indication of the state of politics and how it is trending. The election of George W. Bush, based on the persona he projects, was a clear indication that there are more and more people who are proud to be stupid. I'm not sure if the US leads the way in chasing ignorance, or just has a higher profile in doing so. I do know that, while entertaining to watch, this glorification of fucktardery made me shake my head when Forrest Gump was released. At least there, the stupid guy is good.
As to applying software development and maintenance techniques to legislation? Interesting idea. And the guy is talking bollocks when he says it is pointless to make legislation generally available for review.
Slashdot proves that concerned members of the public can read this stuff. We've got New York County Lawyer. So, yes, the set of people who can comment may be very restricted outside the legal profession. Yet, people like NYCL can give an interpretation of the legislation, sort of reverse-engineering it to whatever talking points the politicians fed to their highly-paid legalese generators. They can then point at the specific bits of the legislation, and you can judge for yourself if they match the analysis. Well, if you've not been indoctrinated to vegetate in front of Glenn Beck et al.
As long as you know where these volunteer legal analysts actually stand on issues, this would very valuable. They help tease out parts of the proposed laws that have obviously been fed into the process by lobbying groups who do not have the public's general welfare at heart.
Apart from the obvious implication that an elected official thinks, "the public who elected me are too stupid for me to make any effort to keep them informed of what I'm doing. It is a near-criminal offense to refuse to give people a chance to have their say on vital laws. In this case, the majority do want a public option, and in an ideal well-informed democracy those who do not would accept that.
As with all things political, and in a huge number of other areas, you should always follow Deep Throat's advice to Bob Woodward. Follow the money.
Where's the Kaboom?
There's supposed to be an Earth-shattering Kaboom.
Maybe we should switch to more distributed (federalized? :) ) system? Like, allow states to branch laws in their private repositories?
Lawyers generally use MS Word's version control system when negotiating new contracts. It may not be as good as CVS or Subversion, but it is at least something.
More importantly, what they need is to use a formal definition of the law, coupled with a system that can check and prove there is no inconsistency within it.
It would also make law trivial to apply, since the system can simply deduce what applies in the given situations, which means we wouldn't need lawyers anymore, and the role of judges would be greatly reduced and simplified.
Have you seen the size of these bills? That size and the complexity of the language means that there is no way any congress person could have read the bill. Even the author of the bill, has probably not read the complete text.
That is not as big a problem as it sounds, though. Each congress person and the committees have staffers whose job it is to do just this type of thing. They have teams of technical experts (analogous to software developers) who understand the code of the law. This is one reason that policy debates often focus on reports from all sorts of obscure government agencies. You need highly technical experts to comb through this stuff and make sense of it. The policy debates get down to which set of experts you believe and trust.
I think a lot of us think of congress people as coders who are working on the law, but they are really more like vice presidents directing teams of coders in broad policy directions. In that sense, it is okay (and even preferable) that they not micromanage too much.
You want to tkdiff a bunch of B.S.? I got one commit for you:
$ git commit -m "revolution"
:T:R:A:N:S:
What I do not understand, is where are the lobbyists for the larger document management companies, (Documentum, Hummingbird, Filenet, or any others, and no I'm not endorsing here). Why is this space so quiet from those seemingly interested in Profit$?
It would probably not be profitable for them. Developing a special system for Congress gives you exactly one customer. To be profitable with only one customer you have to charge a huge amount of money for your system. That makes doing business with the government a completely different beast than anything else you do. And then since the government is spending public money there are all sorts of arcane procedures in place to prevent abuse and you have to know how to work that system.
In general, companies that do business with the government specialize in it (or have a separate business division that does). Everyone else realizes that it is just a distraction and that there is more money to be made by concentrating on the private sector.
"Plain language version"? "Corrected"? "Translated"? "Legislation that is passed on"? What on earth are you talking about? This is horrifyingly wrong. There is no "plain language version". Legislation is not "translated". Committees report a bill with specific language; though it may be amended later (generally on the floor, or in conference) there is no "correction".
And "The legislative language isn't that important"? That is so amazingly, completely, and gravely wrong that I have no idea where to start debunking it.
Yes, I AM a lawyer and I work on issues involving legislation every single day, so I fully expect I will get modded down. The perils of crowdsourcing.
Penny - plain text accounting
I think it happens all the time. Even in dinky town meetings, what gets passed (which often looks like a bunch of context diffs) is the law; we may discuss it in terms of what it looks like with the diffs applied, and we may catch errors in the diffs and correct them before we vote, but what we vote on is the official thing. Sometimes we have to vote again, a few months later, to correct what are clearly clerical errors, and the clearly clerical errors, if they can easily be ignored in the interim, are ignored, but nobody pretends that they aren't law.
It does sometimes happen that the people in charge of enforcing the law, do not understand what is intended, or perhaps the law is not written clearly; at a recent public meeting the town planning and economic development manager professed not to know what the phrase "six or zero" meant for side setback, when it had been repeatedly described as intended to mean "a minimum of six feet, except that zero is also allowed" (which is perhaps how it ought to be phrased, but it was patched into one of those tables with a column titled "minimum"). The idea is that if buildings are not actually abutting, then the alley between them must be usefully wide enough to allow trash removal, etc.
Why not make the source itself a formal language? That way the idea of source code control for law would fall out naturally along with a better legal system.
From Example of Normalized English Input to NLESB:
Normalized English has been developed by Layman E. Allen and his colleagues; see for example, Layman E. Allen, ``Language, Law and Logic: Plain Legal Drafting for the Electronic Age,'' Computer Science and Law (Bryan Niblett ed.), 1980, pp. 75-100. Normalized language has been used in the Tennessee statutes (Tenn. Code Ann. sect. 33-6-104(a) (1991)).
An example of the form of Normalized English used as input to the NLESB system follows. Note that the formatting is for the sake of readability, and is not necessary for NLESB.
Subsection (a). IF AND ONLY IF
(1)(A) A person has threatened or attempted suicide or to inflict serious
bodily harm on himself, OR
(B) The person has threatened or attempted homicide or other violent
behavior, OR
(C) The person has placed others in reasonable fear of violent behavior
and serious physical harm to them, OR
(D) The person is unable to avoid severe impairment or injury from
specific risks, AND
(2) There is a substantial likelihood that such harm will occur,
THEN
(3) The person poses a "substantial likelihood of serious harm" for
purposes of subsection (b).
Subsection (b). IF AND ONLY IF
(1) A person is mentally ill, AND
(2) The person poses a substantial likelihood of serious harm because of
the mental illness, AND
(3) The person needs care, training, or treatment because of the mental
illness, AND
(4) All available less drastic alternatives to placement in a hospital or
treatment resource are unsuitable to meet the needs of the person,
THEN
(5) The person may be judicially committed to involuntary care and
treatment in a hospital or treatment resource.
Seastead this.
And I think there's a lot of value to it, especially if you use a distributed VCS, like git or mercurial.
In fact, I've even set up a github project that tracks the US Code. I have a small Python script that retrieves the entirety of the code from uscode.house.gov and extracts and organizes the titles. There's a cron job that runs this process daily and commits any changes to the local repository, then pushes them to github. So you can use the github project to track the changes that are delivered into the final version of the law.
Where this gets really interesting, though, is if you use the DVCS in the process of crafting the law, not just to store it and track changes. The README file at the top directory of my github project describes some ideas. I have some more ideas about how the whole thing could be integrated with a sort of legislative social networking site, like github or launchpad, but with some important differences, and much more user-friendly. Here's the content of the README:
This repository contains the complete United States Code. Its purpose is to publish the federal code in a way that makes it easy for interested individuals to access both its content and its changes over time.
Another purpose for this repository is to explore some ideas around how to better facilitate the legislative process. Legislation comes in the form of bills which are essentially patches to the existing legal code. Many different versions of a patch may float around to be debated, discussed, amended, etc., before a final version is applied to the "trunk". The process is extremely similar to how developers manage software changes, particularly in the open source world.
I think it would be very cool if something like github were used to manage the actual law, all in the open and fully visible to everyone. I imagine the official code as sort of a master repository. Each legislator could fork this repository and hack on his own copy. Legislators could pull from one another as they massage the language to get it right. The House and Senate would each have their own forks, as would the committees. The president, too would have a fork of the official repository.
The legislative process would then be fully visible to anyone who cares to look. Congressman Blowhard commits a change to his code and pushes it to the public fork. Congressman Slick looks at it, likes it, pulls, commits a change and tells Blowhard about his change, etc. Eventually, the bill makes it to committee, and the committee may have several branches indicating the status of bills as they progress through the committee. Eventually, if the bill is voted for presentation to the House, it is pulled into the committee's "trunk".
If the House votes to approve the bill, then it's pulled to the House's trunk, available to be pulled by the Senate. The Senate can make its own modifications, and perhaps the result must pass through a House/Senate reconciliation committee, before being pushed to the "Passed" branch (or fork), with a message to the president.
Anyway, that's the idea. It may seem kind of silly, but if you've ever actually tried to track the progress of a bill through the existing web interfaces, it's horribly difficult, and there's a lot of information about the bill's movement through the process that simply isn't available. I think using revision management tools just might make the whole process both easier and more transparent.
And that's what I want to play with.
I fully recognize that many legislators may not WANT the sort of transparency that the system would facilitate, but I think that there are a crop of young reformers every year who would embrace it, and in another decade the "facebook generation" will start entering the legislative halls in a big way. It would take a long time to get something like this incorporated into the process, but the result would be a great improvement to our republic.
Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
From HR 3200:
"Part A.--Section 1814(a) of the Social Security Act (42 U.S.C. 1395f(a)) is amended--
(A) in paragraph (1), by strikeing "period of 3 calendar years" and all that follows and inserting "period of 1 calendar year from which such services are furnished; and"; and
(B) by adding at the end the following new sentence: "In applying paragraph (1), the Secretary may specify exceptions to the 1 calendar year period specified in such paragraph."
The reason why these guys don't want to read the law is because they're reading a Diff; it takes additional work to dig up the original law and figure out what the diff actually means.
It's why there should be a legislative analyst (such as the one in California who interprets Initiatives for the voters) who can impartially summarize the actions the law will likely take, the potential costs or savings, and who can produce the original law with modifications, using strikeouts and italics to show where the changes take place.
And the output of that analyst should be made available to the public as well on forums such as Thomas.gov, so the lay public doesn't have to chase down the three or four dozen other laws (from Social Security to HIPAA) which laws such as the Health Care Reform Bill would touch.
Translation: The voters who elected us are not only too stupid to make their own personal financial and healthcare decisions independent of government, but they are also too stupid to understand the laws that we are enlightened enough to impose on them.
They need to get over themselves. A friend of mine from Romania became a new American citizen this year. I showed him a "pocket" copy of the Constitution I have, and we started talking about it. He said that the greatest thing about it is its simplicity. Anyone with a decent vocabulary can read the Constitution and understand its plain language, even if English is their second language, even though it's now more than 200 years old.
It was a law written to be understood by the people. When the law is no longer simple enough to be understood by those who live under it, it becomes a weapon of tyranny.
And these politicians want to tell us that we are too stupid to understand how our own government works. They tell us this because if we believe it, they have power over us.
Good judgment comes from experience.
Experience comes from bad judgment.
I'm not aware of any version control system that does this. Is anyone else?
Huh? You're not aware of any version control systems at all? Strictly speaking it is the particular diff tool rather than the VCS that matters in this case, but every diff tool I've ever worked with has options specific to suppressing exactly the kind of trivial differences you've inexplicably cited as a "big problem."
Blasphemy is a human right. Blasphemophobia kills.
The problem is they're *all* "shitty bums." So it rarely matters what you do in the voting booth.
The root problem with our voting system is that it is specifically designed, both at the citizen level, and at the legislator level, so that any two uninformed individuals (of which we have a vast surplus) can outvote any informed person (of which we have a severe shortage.) Consequently, our system is degenerating at a steady pace, our liberties evaporating, our privacy eroding, our founding ideals moldering.
There is a (ridiculous) mindset out there that says that reasonably qualifying individuals to vote is "prejudicial"; these loonies imagine that it is racist or otherwise unfairly disenfranchising. However, the only people it disenfranchises are people who fail to become informed on the issues they're voting for. Obviously handing over this responsibility to a representative was supposed to solve the "uninformed" problem, but also obviously, it doesn't.
Watching the country implode upon its own founding precepts has become the national spectator sport. The chief betting issue being only whether the next blow to the country will come from the legislature, the courts, or the executive.
I've fallen off your lawn, and I can't get up.
There's an enormous amount of existing code. Look at how much Slashdot talks about COBOL, which is around 50 years old. In common law countries (eg Britain, the USA and Australia), the law has code nearly a millennium old, written in a variety of languages.
Fortunately we're talking about a much smaller problem.
We're not talking about putting THE LAW into a revision control system. We're talking about putting THE STATUTES and PENDING LEGISLATION into a revision control sysetm. This excludes common law, administrative law, judicial interpretation and precedent, judicial striking of law for constitutional issues, judicial district differences in precedent, enforcement priorities, and a host of other things.
The constitution, the statutes, and their proposed revisions are exceedingly well structured for a computer-code-style revision tracking system.
Later such a system might be augmented to track things like judicial precedent, law review articles, history of enforcement, and the like in much the same way that current sysems can (or should B-) ) track documentation and its connection to code.
But the immediate target is eliminating the "too complex to understand so I didn't bother to read it" excuse that the legislators are using to pull con games on their opposition and the public.
Bantam Dominique roosters crow a four-note song. Once you've heard it as "Happy BIRTHday" you can't NOT hear it that way