skeletonbow: People think languages like Java are necessary to maximize portability, and while Java is always advertised that way, the truth is that it is totally possible to write non-portable Java applications and I've encountered them over time.
Gede: Well, those are different kinds of being portable, aren't they? (binary/bitecode vs. source) I still think that going with Java (or some interpreted language) is a safer bet, while not the only possible way, as you made a point of stating.
When they do stabilize and publish the API, it will be possible for some 3rd party developer to make a stub library for Java of the API if they wish, and for someone to attempt to write a client in Java with it in theory. All I can say about that is "best wishes" to anyone who decides to do so. My observations of major applications written in Java as alternatives to those written in C/C++ are that they are massively bloated, consume RAM and CPU resources out the wazoo and seem to have their focus on rapid development rather than resource consumption.
For example, back when I started using utorrent which is written in C++ and was highly optimized it used 6-8MB of RAM fully loaded downloading dozens of large Fedora/CentOS torrents simultaneously. The other popular program at the time was Azureus now known as Vuze, which is written in Java. It used something like 100+MB of RAM. Not sure what the statistics for the current versions of each program are. I know utorrent's resource consumption went up over time due to new features and functionality etc. and I assume Vuze's has also, but I'd wager that utorrent is still far less of a resource hog. Not that I would use utorrent any more nowadays since they started shipping it with built in OpenCandy malware though but that's a whole other topic...
Plenty of examples of just about any other application type out there. I'll take a big wide pass on any major GUI desktop apps written in Java myself, but that's just me. :)
skeletonbow: Sure, the could talk about Galaxy on Linux more but I really don't think that would do them any good and think it would do them harm unless they plan on releasing it a week later.
Gede: As I see it, it really comes to what you say and how you say it. It seems GOG is being too careful about what they say. This strategy does have its downsides.
All strategies have their downsides. What strategy one chooses is a matter of choosing the upsides and downsides that match the desired goals etc. the best and only GOG can decide what strategy they think is best. They're also free to change the strategy over time if they think it makes sense to do so, and I think they already have done so.
skeletonbow: They're not going to make the specs available until they've finalized the Galaxy APIs to the point they aren't going to make any more core changes to it.
Gede: I understand that. But... isn't the planning phase supposed to prevent them from doing major core API changes? That also hurts them. It also breaks their own Galaxy, unless they always force everyone to upgrade (maybe that is quick)?
Anyone who has ever done large scale application/API development knows that they evolve over time based on the needs of the project and that you don't want to be tied down to a certain way of doing something that you later learn was not the best implementation. It is completely natural to implement something a certain way and then later realize a better way of doing it and change it. When you have no external things depending on it, you are free to change it as often and as much as you like, and when the entire project is defined as being in development, the API can and does change often based on new features being added, things evolving as a regular part of code churn. Sometimes you even learn a much better way of doing something than what you were doing and throw huge chunks of code away and replace it with a whole new way of doing it.
You change the API, you update your own code that uses it to use the new bits as you go, and it can quite literally happen every day. If one wants to see this first hand, simply subscribe to the mailing lists of any major open source project covering public APIs that is in a deep state of development. Some projects use static libraries instead of DSOs in order to mitigate this, so that they're free to change the API/ABI at will and old programs will still run as they're statically linked. They can then change things in newer releases and it will only affect new code, but that approach brings all kinds of problems on its own and is greatly frowned upon. X11 had this problem over a decade ago with a number of its interfaces, but the usage of static libraries were phased out and versioned DSOs used instead. That's the right way to do it however when you decide to do that you potentially end up supporting multiple versions of every DSO that you decide to change the API of, and that in turn causes many projects to avoid changing the API for a long time because they don't to have to support a multitude of different DSO versions.
The bottom line though, is when you have a project in-development, it is a well defined given that anything can be changed at any time, and that can be a nightmare for 3rd party projects if they are relying on an unstable and ever changing API whether it is documented and published or not.
Another element of this that I've personally encountered that was no end of frustration, was the freetype font rendering library. I'm not sure if the freetype library still has this problem nowadays or not as it has been many years since I have looked at the source code or had to deal with it however a decade+ ago when I did deal with it on a daily basis, the project mixed their public API with their internal private API in the public header files. Many projects including X.Org and XFree86 among various others used both the freetype public API and the private API, and while it's not clear as to whether or not that was on purpose or not, private APIs are NOT intended to be used by 3rd party applications but rather internally by the library itself. These functions should be marked appropriately to not be exported to become available to external programs to use however the freetype project didn't do that for whatever reasons and as such every new version of Freetype whenever they changed their internal implementation of something and it affected the internal APIs as they should be free to do since by definition they are for the internal implementation and not public consumption - 3rd party programs that illegally used these internal functions would break miserably en-masse and various people (myself included) had to go deal with all of the mess.
Not sure if they ever bothered to go and fix that properly and hide internal private functions from being visible to software that used freetype or not but it was certainly a good example of what NOT to do when writing a DSO for public consumption.
A well designed API needs to be forward thinking as much as possible, and it should be flexible. In the process of developing such a thing you may experiment with different ways of doing things and you want to be completely free to keep what works well and to throw away what does not work well or to replace one way of doing something with a better or more flexible way of doing things, and you don't want to have to maintain backward compatibility with each and every change you make that removes an interface or changes the way it works.
Having 3rd party code tied to your ever changing in-development API is a developer's absolute nightmare thought because every single time the slightest thing changes the people who are using it (whether or not they should be such as in my freetype example above), they will breathe the hottest fire down your throat and cry "evil company! Changes the API to break competing product on purpose" or similar crap.
No experienced developer is going to want to put themselves in that position. I for one would never document nor publish an API I was working on whether part of a commercial product or an open source project until it was at a bare minimum nearing completion and I knew with reasonable certainty that no major API breaking changes would be going in. Even then I would warn people that they could occur up until the first official stable release, but I personally would probably hold off from it until I knew for certain it wouldn't change because of my experience in watching how people use these things and react publicly when things break and they're not happy about it because they have to go and change their code.
If GOG has experienced developers working on Galaxy, and I know for certain that they do, then they're probably smart enough to do the same thing, and to date it seems like they're being smart about that IMHO