10 ms·
Gnat 2021 GPL Community Edition Ada 202x compiler released
- 13415 5y agoJust remember that all software you compile with it will be under the GPL.
- lucioperca 5y agoThat is just wrong.
- 13415 5y agoNo, it's not. It's the difference between the FSF version and this GNAT 2021 Community Edition by Adacore. The FSF version is under mGPL, this edition is under GPLv3 including the runtime which is included in every binary. I mentioned it precisely because people get it wrong so often.
- Tomte 5y agoThat's wrong, and this idea has popped up repeatedly on HN lately. It's true that you may only use GNAT GPL for hobbyist use and GPL software. But breaking GNAT's license doesn't make the software created GPL. It just makes you liable for damages. And cessation, of course.
- e12e 5y ago> breaking GNAT's license doesn't make the software created GPL This is an important distinction. But it's still true, that using the Ada core GPL Ada compiler, which does not come with lgpl/run-time exception - you can only legally distribute binaries under the GPL (or commercial license). This does not matter much if you don't distribute code to others (eg: break system of a car - gpl/commercial; build a web server to sell/stream movies - gpl/internal use). I still think it's probably a mistake to have the fsf and Ada core version be so similar, yet differently licensed (because it is confusing - most are used to gpl compilers comming with lgpl/runtime exception, like gcc).
- eggy 5y agoI am learning SPARK2014 and it is this confusion around the GPL that gives me pause in fully committing to this direction or any other GPL-licensed software, mainly due to not fully understanding how I can use the Gnat Ada 202x compiler. I am learning Zig, and it is MIT (expat) licensed, which I feel more comfortable in accepting. Rust is the same (dual-licensed MIT/Apache V2), and I think given some people comparing Ada to Rust for high-integrity software are going to gravitate to Rust instead of Ada. SPARK2014, a subset of Ada, is an amazing language for these endeavors.
- tobiasu 5y agoYou can build gnat and gnatprove yourself, including runtime exception. This is a bit painful (intentionally so) but it can be done.
- e12e 5y ago> You can build gnat and gnatprove yourself, including runtime exception. How does that work? Are the binaries from Ada core (not FSF) intentionally distributed under GPL while the source for standardlib/run-time come with LGPL/run-time exceptions? It was my understanding that the Ada core distribution is full GPL only, and the FSF one (lagging a few versions) was licensed more like gcc?
- my123 5y ago> It was my understanding that the Ada core distribution is full GPL only, and the FSF one (lagging a few versions) was licensed more like gcc? Yes that's the case.
- andi999 5y agoSome source on this?
- tobiasu 5y agothis is unclear to me, what source do you need?
- deleted 5y ago[deleted]
- Rochus 5y agoUsing a compiler whose code is under GPL doesn't make your code GPL. But using the GPL runtime library might be an issue. The FSF GNAT version has a runtime library exception which allows you to use the runtime library in non GPL code. The Adacore version has no such exception (at least it didn't when I checked last time). > But breaking GNAT's license doesn't make the software created GPL If you do not comply with the terms of the GPL license you're no longer allowed to use the code/software licensed under GPL. Under GPL 2, you can continue to use the code/software after the license violation is removed. Under GPL 3 the copyright holder might terminate your license (see section 8 of GPL 3).
- p_l 5y agoEven then there can be a question of whether your code is derivative of the runtime, or of the standard. If the latter, then you might escape the licensing quagmire
- hvdijk 5y agoYour source code may not be a derivative of the runtime, but your object code clearly is.
- Rochus 5y agoI don't think you can use Ada without dependency (i.e. making a combined work) of a runtime (maybe someone knows a good way without sacrificing relevant Ada features, I don't).
- p_l 5y agoThe basis of derivative work, even when RMS was bullying projects with it, was whether your code was dependant on the GPL implementation, or say, could just as well be built with another vendor's library - even if that one was GPLed too, so long as it wasn't derivative of the first runtime. Essentially a case of "coding for standard interface offered from multiple sources where the interface itself isn't GPL" vs "Your code requires rework in order to work without this specific GPLed dependency". This is all grossly simplified, but among other things, it means that separating GPL code to another binary you talk over any form of IPC doesn't necessarily mean you're avoiding GPL.
- 13415 5y agoThis issue has been discussed for decades over and over and there are still people like you claim that I'm wrong. I am not wrong. The runtime of the Adacore Community edition is under GPL, as are many libraries included in the Adacore edition that are not included in the FSF edition. Your binaries will be under the GPL. (Technically speaking, you could compile executables with this version of GNAT that are not under GPL by writing your own runtime. Practically, this is pretty much impossible and nobody has ever done it.) The FSF edition allows you to compile executables without license encumbering, because it is licensed under the mGPL.
- Tomte 5y ago> Your binaries will be under the GPL And you've been wrong for decades. All the things you write are true, except when you claim that the binaries will automatically be GPL. The author has to make them GPL, in order to comply with the license, that's true. But they don't magically become GPL if the author refuses. If the author doesn't comply, Adacore can sue them. They can demand that the author stops distributing non-compliant binaries. They can demand that the author pay them money. They cannot, for example, redistribute the binaries themselves (against the author's wishes), under the theory that they "should be" GPL. The court probably wouldn't even order the author to put the binaries under GPL, because specific performance is generally not considered by the courts, when paying damages is a workable alternative.
- 13415 5y agoThat's probably the worst case of nitpicking I've ever encountered in my life. Yes, you're technically correct. It's not as if you're telling anyone something new, contract law exists for a while already. I wrote the comment because many people don't know the difference between the FSF version and Adacore's Community Version, hence will involuntarily violate the GPL.
- 533474 5y agoAre you paid or are you just misinformed?, it is one of the most widespread misconceptions about GPL
- Tomte 5y agoMy pet theory is that tech people tend to see this as a constraint-solving problem. "If the resulting software were GPL, all those nasty contradictions would go away. Let's assign GPL to the software and the problem is solved." Unfortunately, the law doesn't work that way.
- 13415 5y agoI'm neither paid not misinformed. There is no runtime exception for the Adacore Community version, it is under GPL including the runtime, hence every executable produced with it is also under GPLv3. If you want mGPL (with the runtime exception) you need to wait for the FSF version. This is well-known in the Ada community, but I thought I'd mention it because occasionally people don't know the license conditions of various GNAT versions very well. Such as you.
- Lucretia9 5y agoFSF GNAT hasn't been MGPL for years, not even sure which version, but I think it's before 4.9.4. FSF GNAT is GPLv3 with linking exception.
- 5y ago
- tobiasu 5y agoThe downvotes are utterly ridiculous. Unlike other parts of GCC, GNAT copyright is held by AdaCore due to some special arrangement with the FSF. For the compiled CE releases on their website, AdaCore strips the runtime exception: -- As a special exception under Section 7 of GPL version 3, you are granted -- -- additional permissions described in the GCC Runtime Library Exception, -- -- version 3.1, as published by the Free Software Foundation. -- So yes, binaries compiled with that particular compiler are de-facto under GPLv3, and you have to abide by its terms (eg. if a customer using these binaries requests the source code) You are of course free to build the compiler yourself, or use the Ada compiler that comes with your distro. The sources are available, you just don't get a tag that tells you which exact combination of files AdaCore used to build and verify their binaries. This is a strategic PITA, and AdaCore have in recent years made some moves to improve the situation, with being active on github and responding to issues in general.
- spamizbad 5y agoAre you saying if I compile my own GNAT (from source), this exception stays in place and binaries will not be automatically GPL'd?
- tobiasu 5y agoYes, that's exactly how it works.
- gte525u 5y agoThere are multiple distributions under different licenses. If you compile this source (CE) - yes your code must be GPL. Adacore's distribution is the most up to date. The FSF distribution has the normal gcc exceptions. The FSF distribution is normally what's shipped with linux distros. It tends to be slightly older.
- Rochus 5y agoWatch out! If you compile the Adacore version of GNAT then you're limited by the license they give you for their version which is GPL without runtime library exception. This doesn't change when you compile their code. With some delay (a year or so) Adacore releases their versions of GNAT with runtime library exception so it can be merged with the FSF version of GNAT.
- jeff-davis 5y agoThere's some nuance here and I don't think this is correct. However, the uncertainty around Ada licensing causes a lot of people to be hesitant to start with Ada.
- claudionaoto 5y agoI think this is a important point, for what I understand from some old posts, there are basically three versions of Gnat: - FSF: Is GPL but contains an exception that allows you the create programs which are not GPL (basically the same as e.g. g++) - AdaCore Community : Also GPL, but no exception. Hence your program is also GPL. - AdaCore Pro: Commercial and allows you to create programs which are not GPL.
- badhombres 5y agoWhat’s different?
- wiremoons 5y agoSuch a shame there is no macOS support for the new '2021 Community Edition', for either x64 or the newer Apple silicon (M1). As ARM is supported for other platforms (even as a cross compiler only) - not sure why the whole Apple community is being missed out in this update, for both x64 and ARM. Guess AdaCore customers don't use Apple products any more, so hence no availability for the Community Edition either..? One of the benefits of using Ada was the great cross platform support for Linux, Window, and previously macOS.
- Agingcoder 5y agoThere is cross-platform support - just ada-market specific ( qnx, vxworks, linux, windows, etc) and for all kinds of embedded architectures. I don't think osx is a target market in any way : their customers are unlikely to use macs in production.
- synack 5y agoThere's an open source distribution of GNAT for macOS here: https://sourceforge.net/projects/gnuada/files/GNAT_GCC%20Mac%20OS%20X/11.1.0/native/ https://sourceforge.net/projects/gnuada/files/GNAT_GCC%20Mac...
- systems 5y agoThis is more of a general question With the availability of free languages such as Rust, Clojure, F#, Go, Typescript, Idris, Raku You have a solid option that cover ever possible paradigm and style of programming you may fathom Why would any one invest time or effort in a commercial language such as Ada, Eiffel or even Xojo and LispWorks, that require you to pay for Automated test support and what is considered by most standards now basic libraries And not only that, the communities are usually tiny and support is probably very limited to the commercial support they provide, and when it comes to languages, languages with big communities, provide infinitely better support than commercial support for proprietary languages or implementations The cost of AdaCore is not just the compiler license, its the total ecosystem cost
- xvilka 5y agoRust is not yet ready for formal verification, along with some ready libraries for that purpose, unlike Ada/SPARK. Hopefully, it will be there, just not yet. It still requires tremendous multi-year effort to finish that.
- galangalalgol 5y agoIn addition to lacking formal verification tools, I'm worried about compiler certification with a language that changes as fast as rust, and c++, and even c now do. Yes you cannstick to a version, but the world and bug fixes, and libraries will pass you by. Which brings up another problem with rust for safety critical. The stdlib is so very thin, that doing almost anything requies a dependency tree of a dozen or more crates by different authors. You need to certify all those as well. Its a nightmare of an ecosystem from the safety cert perspective.
- steveklabnik 5y agoBe that as it may, it hasn't stopped certification from being pursued.
- galangalalgol 5y ago
- bdavis__ 5y agoto add to the ada saga, RHEL has dropped providing FSF gnat since redhat 6. very big loss to not have ada on one of the big linux distributions. (build your own! yes, it can be done...) edit. fixed wrong word
- jeff-davis 5y agoI'm half-obsessed with C interoperability in a variety of languages. I know Ada (or GNAT) has a C FFI, and I've done a little investigation/experimentation but not much. Here are a few questions, which probably don't have an answer in the Ada standard but might in specific implementations: * Is there a way to declare data layouts to have compatibility with C, similar to #[repr(C)] in rust? * Is there a way to catch C++ exceptions? * Is there a way to catch C longjmps()? * Is there a way to have some kind of custom control over ABI issues, e.g. define custom FFIs to langauges with a different ABI? Or anything close to this? For that matter, does any language have something like this or does it not make sense?
- onox 5y agoThe C interoperability of Ada is very good, you can import/export functions and specify whether records (structs) and arrays must have a C convention. I use it often to access libc and Linux kernel functions/syscalls [1][2]. [1] https://github.com/onox/inotify-ada https://github.com/onox/inotify-ada [2] https://github.com/onox/evdev-ada https://github.com/onox/evdev-ada
- touisteur 5y agoCan attest to that. C++ is also OK. You still have to write the 'binding' but the compiler can generate a good part for you. Then you can 'hide' all the C-like things (like 'a pointer is an address', 'an enumerated type is an integer', 'you have to call our free() when you're done'...) behind opaque types, controlled types, etc. As a simple example you can lookup what the compiler generates as a low-level binding [0] that is wrapped in a higher level API [1]. BTW you can also bind Ada to Java (although support is a bit limited I know places where it's in prod). Don't remember if it's a commercial product or oss. And for the python people, my company financed a first version of ada-py-bind, inspired by the great pybind11. Still a lot of code to write (or generate) but it works fine. Thanks onox for those two links! [0] https://github.com/persan/zeromq-Ada/blob/651ca44cce831c2d717338eab65a60fbfca7ec44/src/gen/zmq-low_level.ads#L601 https://github.com/persan/zeromq-Ada/blob/651ca44cce831c2d71... [1] https://github.com/persan/zeromq-Ada/blob/651ca44cce831c2d717338eab65a60fbfca7ec44/src/zmq-sockets.adb#L218 https://github.com/persan/zeromq-Ada/blob/651ca44cce831c2d71...
- onox 5y agoTo anyone who has a Linux distro and wants to try Ada (2012 on some): Debian/Ubuntu: sudo apt install gnat gprbuild Arch Linux: sudo pacman -S gcc-ada (get gprbuild from the AUR) NixOS: https://github.com/fluffynukeit/adaspark/ https://github.com/fluffynukeit/adaspark/ I think it's also available on Fedora IIRC. And then go to https://learn.adacore.com/ https://learn.adacore.com/ :)
- kitd 5y agoAnyone know why the linux x86 binary is >3 times the size of the Risc or Arm ones?