Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I think it's more like creating a car by reverse engineering Ford's in order to tap into Ford's ecosystem of parts and mechanics. Though I don't know where the line is. I think with API's: you can copyright the header, but not the ABI. I.e. nothing prevents you from making an LLVM module that exposes the same interface as what the header compiles down to.


> I think it's more like creating a car by reverse engineering Ford's in order to tap into Ford's ecosystem of parts and mechanics.

So Ford makes the Mustang, I make after-market brake pads for the Mustang and therefore I have to use the same mounting interface as the Ford pads. I also make callipers and axles and so on; all the parts you need to repair your Mustang.

In theory if I really make all the parts then I can put them together and get a whole car with no OEM parts. But notice that nobody really does this. Because if you're capable of making the whole car yourself, you no longer care if the parts are compatible with Ford parts, you just become Toyota.

What you might see is people selling "whole cars" which are 75% Ford OEM parts and 25% something new and different, like the Shelby Mustang. But it's not clear how that should be something bad.

> I think with API's: you can copyright the header, but not the ABI. I.e. nothing prevents you from making an LLVM module that exposes the same interface as what the header compiles down to.

That's kind of weird. The header and the ABI aren't separable. You can decompile the ABI back into the header. Does it really make sense to be able to copyright something which is just a deterministic transformation of something you can't copyright?


Well, headers can have comments and (in languages without RTTI) type names, which are irrelevant for interoperability.


Sure, there can be comments in a header, but they aren't actually part of the API. They're just documentation that the compiler happens to allow you to put in the same file.

I'm not sure I'm with you on type names though. If the application being linked against the API was compiled using a header with different type names then the application would have to be rewritten to use the other type names. It would break source code interoperability. (And you can infer the type names from the ABI given the source and binary of an application compiled using the original header, without actually having the header.)




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: