The Marriage Amendment
Technology | February 25th, 2004The U.S. Constitution provides a means by which a government can operate without encroaching the rights of citizens. Certain individual rights are protected; for example, the right to free speech and a woman’s right to vote.
President Bush suggests that the sanctity of marriage should be protected as an amendment to the constitution. While it seems reasonable that the connotation of marriage remains distinct from a civil union, it is not consistent with the spirit of the Constitution that it would be ratified as an amendment.
Many gay couples complain they have no recourse to provide for the care of each other in the event that one of them is incapacitated. Furnishing an option for marriage would include this kind of protection, which is a reasonable expectation when two people have decided to spend their lives together. However, this ability can also be provided contractually without impinging the sanctity of marriage. For example, a durable power of attorney would allow a gay couple virtually all of these protections.
While the term marriage should continue to connote the union of a man and a woman, gay couples should have legal recourse to create civil unions that include the same legal rights as married couples. Societal establishments do not belong in the U.S. Constitution, it remains the purview of a judicial branch to adjudicate in favor of civil unions where they do not violate federal or state law.
Technology Monocultures
Technology | February 16th, 2004Technology monocultures are the result of non-diverse systems that provide the same capabilities but also share the same defects. An example of a monoculture is the potato famine in Ireland, where nearly 40% of all food consumed was a particular strain of potato. When that potato became scarce as a result of a a viral attack, the Irish lost a primary food source and many went hungry.
Microsoft Windows is principally a monoculture in this regard, there is a complete lack of diversity in this technology. In this case, the same computer program (Windows NT/2000) is running pervasively on the same CPU (IA32/Pentium) on the vast majority of computer systems. While this means it is easy for users to learn the intricacies of the operating system, it is just as easy to inject a Windows executable virus and wreck havoc.
The Linux operating system provides more diversity, it runs natively on multiple processors (Intel IA32 and IA64, PowerPC, AMD, MIPS, Sparc, and many more) and has a number of pre-packaged distributions (RedHat, Suse, Debian, Lindows, and more). While all of these systems provide essentially the same user experience, the diversity of the platforms and distributions make it difficult to exploit a weakness universally.
Microsoft can provide an analogous capability by encouraging the heterogeneous adoption of Intel IA32 and IA64 (Itanium) platforms. If more Windows software is made available to Itanium, it will be easier for users to run a desktop on IA64 that is comparable to an IA32 PC. Furthermore, by making Windows available to PowerPC they can provide some adoption by PPC users, which would open a new market to computer vendors seeking alternatives to Intel.
Unfortunately, Microsoft has an uphill battle that open source is poised to win. The majority of software for the Windows platform is closed-source, which means it is impossible to recompile all the programs a user is accustom to. The open source Linux platform, on the other hand, has the majority of software in the public domain. As a result, when a new processor technology becomes available it is a matter of re-compiling the applications and the user can then experience the same thing on a Sun Sparc as they would on a Macintosh G4 or an IBM PC.
Open Source Business Models
Software | February 6th, 2004Proprietary closed-source software solutions have the dubious honor of providing little or no advancement in the state of the art for computer technology. In fact, open software designs are the principal reason for the the success of the Internet. Without open source, we would not have electronic mail, web browsers, word processors, desktop publishing, or any of a myriad of modern computing applications.
The Government should not be making offers to purchase closed-source commercial software solutions when an open source alternative already exists. In fact, this unnecessary expense will only incur further expenses when these products require migration to new platforms and emerging technologies.
With open source, we can become self-sufficient using modern software technologies on any platform for which there is a compiler. When new generation 64 bit CPU’s become available, the selection of open source ensures there will not be a new licensing requirement for a new kind of processor. This is, in fact, one of the primary factors that currently stifle innovation in the commercial sector and will continue to adversely affect the chip manufacturing industry.
There are many proven business models for companies selling open source solutions, including Cygnus, Redhat, Novell, and IBM. As the international recognition for open source continues to grow, it is even more important that the United States take advantage of this platform.
When Unisys enforced a patent on a common algorithm (LZW), an unreasonable burden was placed on the open source community. A similar debate emerged when the authors of the DeCSS algorithm were taken to court, it has effectively been deemed illegal to reverse engineer common application protocols. There is an unacceptable level of restriction on the open source development community, while it is reasonable to prohibit entire application subsystems from being stolen it is unreasonable to provide protection for small segments of code or algorithms that can be reverse engineered.
The baseless claims furnished by SCO to the Linux community are capricious, there is no proof that Linux authors have stolen intellectual property from SCO. They have provided no material evidence for specific segments of improper code, and even when they do the open source nature of Linux implies that any such impropriety could be easily remedied. Commercial software does not provide any level of credibility, if there is stolen code in a closed-source application then it is virtually impossible to discover.
Clearly SCO has been using ongoing litigation to spread fear in the computing industry. Many professionals are afraid to use Linux and other open source solutions; therefore, it is imperative the government indemnify not-for-profit open source authors from these kinds of liabilities. SCO should not be allowed to proceed with this smearing campaign any further, let’s send them the message that open source software really does matter.
Developing with Microsoft .NET
Software | February 4th, 2004Developers building applications with the Microsoft .NET platform are no doubt aware that a CLR (Common Language Runtime) is necessary in order for the .NET bytecode to execute.
In essence, C# and VB.NET produce a intermediate representation of a computer program that requires an interpreter to run. One of the great benefits here is that the same program can run on Windows using the Microsoft .NET framework, and when it is copied to UNIX the Mono runtime can interpret it there. The only source of contention is the reliance on poorly defined platform dependent libraries, such as the Windows.Forms that use the native Win32 API’s to render windows onscreen.
Unfortunately, Microsoft chose to produce output that purports to be executable when in fact the resulting code must use a CLR to be interpreted. This has happened because the final program is given a .EXE file extension and some header information is prefixed to the bytecode output that makes it look very much executable.
Imagine if Java produced .EXE files instead of .CLASS files… how confusing would that be! Joel Spolsky questions why Microsoft fails to include a linker in MS .NET, if the output is suppose to be an executable then it would seem logical that a developer should be able to link the resulting executable to have it run without a CLR.
The simplicity of the Java solution is elegant, when examining a file with a .class extension it is immediately apparent that this requires another program to run. Developers familiar with the JVM will be further able to recognize that a Java runtime is required and will be able to take appropriate steps.
On the other hand, Microsoft .NET developers will not be able to recognize that a file with a ubiquitous EXE extension may also require a runtime. You would think that Microsoft would have learned a lesson from the awkward Visual Basic runtimes (VBRUNxxx.DLL) that caused untoward compatibility issues. At least a linker can tell you what DLL files your dynamically linked application depends on, the .NET platform should be taking advantage of similar functions to inform the user what version of the CLR they should be running. More importantly, the user should not be presented with a non-executable executable.
What is even more unfortunate is that without using the resource fork available in NT filesystems, a developer cannot even rename their output (eg: PROGRAM.EXE to PROGRAM.NET) without rendering it unusable. There is clearly a lot of work left to be done with MS .NET, maybe in a few years it will be on par with other bytecode interpreted languages like Java.

