Winelib Hobbled by Exception-Handling Patent
davidwr writes "UKBuilder.com reports that Borland's structured exception handling (SEH) patent affects Winelib. Winelib allows you to compile Windows-targeted code to run natively on Linux. Because of the patent, gcc does not include support for SEH, which is widely used in the MS-Windows world. There are workarounds, but you won't like them."
Since Borland USED Winelib in Kylix.....
Amazing how thing like this rear their head AFTER a company that holds the Patent actually used the app in their OWN product, can you say STINGY
Of course this was discussed on the gcc list, the thread starts here.
Links to an implementation of this can be found in this mail, the legality of this implementation is discussed in the followup.
The inevitable prior-art discussion begins here.
This is the patent in question.
According to the article, either avoid structured exception handling altogether or use Microsoft's compiler to build the projects.
Except that the "not implemented in gcc" implies this feature is not yet in winelib and won't be soon. So they wouldn't have distributed a version of winelib that contains an implementation of the patented algorithm(s).
The patent is at
T O1&Sect2=HITOFF&d=PALL&p=1&u=/netahtml/srchnum.htm &r=1&f=G&l=50&s1=5,628,016.WKU.&OS=PN/5,628,016&RS =PN/5,628,016
http://patft.uspto.gov/netacgi/nph-Parser?Sect1=P
The Patent Number is 5,628,016
There are two dates:
May 6, 1997
and
Filed: June 15, 1994
I assume the 1997 date is the "granted" date. Why is this problem surfacing now, almost ten years later??
Stephan
http://stephan.sugarmotor.org
The Structured Exception Handling in question is purely for C, and is unrelated to exceptions in C++ or Java or any other language's implementation of them. It's hardly even the only C-based implementation around, so there's no shortage of source-compatible solutions. It is the one Windows uses, however, so binary compatibility would seem to demand it. However, I don't know if SEH even works across a DLL boundary -- usually its usage is even confined to a single compilation unit.
Hopefully somebody investigates OpenVMS as potential prior art here. The OpenVMS Condition Handling Facility provides substantially the same exception-handling functionality as SEH and has had much of it since the 80's. http://h71000.www7.hp.com/doc/72final/5841/5841pro _038.html#chf_vaxalpha
Funny, but its current home page doesn't exactly give me warm and fuzzy "safe" feelings. Methinks you chose a bad example there :-)
There are benchmarks aplenty - go forth and google them.
Dr. Dobb's Journal does an annual review of the c/c++ compilers every year. Usually they are pretty much the same unless you are looking for a specific performance advantage.
My first thought was, gee, that's not been my experience--as I recall, although it was complicated, it was rather well documented. So I did a bit of Google and found that other people seemed to agree with me (i.e., they say things like "Furthermore, compared to the other compiler projects, GCC offered the most comprehensive documentation for backend porters." and so forth).
The only thing I could find that even sort of suport your claim was RMS's thing about not wanting the backend to drift into becoming an LGPL black-box (thus chilling the development of new GPL'd front ends).
So, do you care to back your claim up?
--MarkusQ
This is completely untrue and misinformed. The original patent on graph coloring has expired (or will expire soon), and IBM granted the right to use it in any GPL'd software anyway. Rice University also granted the use of the patent on Preston Brigg's improvements to GPL'd software. So GCC could, and in fact has, implemented graph coloring register allocation (see the new-regalloc branch), over 2 years ago.
gcc does a little bit better than the MS compiler does, but it's still a little behind the intel compiler. (By the way - if you want a linux box to really fly, use icc to rebuild the libraries, kernel, and your window manager.)
> This is a story about a shortcoming of gcc and Winelib because so many
> Windows C++ developers use SEH instead of sticking to standard C++.
There are a lot of things that standard C++ does not cover:
UI, Device I/O, Threading, Synchronization, Async I/O, Interprocess Communications, Virtual Memory management, Registry access, Networking, etc.
For that, you must use the underlying OS features (either directly or via a library that abstracts it).
SEH is one such element. It allows you to catch "system" exceptions such as access violations. It is an OS feature that standard C++ does not address.
Quoting form the MSDN:
[The] difference is that the structured exception handling model is referred to as "asynchronous" in that exceptions occur secondary to the normal flow of control. The C++ exception handling mechanism is fully "synchronous," which means that exceptions occur only when they are thrown.
> Europe (as of now) has no software patents.
Wrong. The European Patent Office (EPO) has issued thousands of software patents. There are just doubts as to their enforcability, and several member countries do not accept them at all. This is what the new EU directive (CIID) is all about.
A reading of the patent looks like they are reserving space on the stack for each function that can serve as exception "registration" information.
This feature was available in VAX/VMS in the late 70's, a function could establish an exception handling routine on the current stack frame by issuing a Lib$Establish() call (or just storage the exception rouitne address directly on the stack in assembler).
This is completely wrong if you're trying to apply it to the US. A patent grants the right to exclude others from making, using, offering for sale, selling, or importing the invention. There's a very narrow exception for learning how the patented invention works or improving upon it (and you can patent the improved version, but nobody can make or use it without a license from the original patent holder as well) but not for any other development or use, non-commercial, personal, or otherwise.
Remember, patents don't mean you can't code it.
Wrong.
You can code it. You can use it for personal non-commercial use.
Wrong. Personal non-commercial use has nothing to do with it. Patent use outside of proper licensed use is limited to experimental use, not non-commercial use. Your personal use for non-experimental purposes would not qualify.
You can distribute the code.
Wrong, known as contributory infringement. You would be even more liable.
But you can't use it commercially, distribute binaries, or sell it.
Wrong. You cannot: make, use, sell, offer for sale or import the invention.
Seriously, 99.9% of coders are totally patent-ignorant, but feign like they understand the patent laws.