Right now, if you ask that question, you'll get about 8 different personal-preference answers, which drives people away from our platform. Having to potentially evaluate several different languages and their stacks gives potential developers a lot of unneeded extra work.
There was broad consensus in the hackfest for this goal because it allows us to:
- It allows us to focus when we write developer documentation, fixing bugs in the development environment and the development of tools. This reduces our maintanence costs and enables us to be vastly more efficient.
- It enables code and knowledge sharing to occur, so that people can easily copy and paste code from existing applications, or find information about common problems and challenges.
- It provide a coherent and easy-to-follow path for new developers.
- It allows us to include the full GNOME framework within the language itself.
We spent a long time discussing the different options that are available to us, and there were a variety of opinions. However, at the end of the day, we had to recognize that no language is perfect and there will always be disagreement. The important thing was that we had to make a decision.
It's critical that everyone understands this decision as a plan to elevate the language, bindings, tools, and documentation to a level of quality we have not yet achieved. It is not a decision to abandon any other language bindings. We will continue to distribute other bindings and documentation as we do now and compatibility for the other languages will continue to be developed as they are today by the developers involved with those modules.
Our decision is to support JavaScript as the first class language for GNOME application development. This means:
- We will continue to write documentation for other languages, but we will also prioritize JavaScript when deciding what to work on.
- We will encourage new applications be written in JavaScript.
- We will be working to optimize the developer workflow around JavaScript.
C will remain the recommended language for system libraries.
Why JavaScript?
- Our language of choice needs to be dynamic and high level.
- There is already momentum in the GNOME Project for JavaScript -- it's used in GNOME Shell and GNOME Documents.
- There's a lot of work going into the language to make it especially fast, embeddable, and framework-agnostic.
- JavaScript is increasingly being seen as a first class desktop programming language -- it us being used in Windows 8, mobile platforms, and for local web applications.
- JavaScript is self-contained -- it doesn't come with its own set of core libraries, which makes it more convenient for us when integrating it into the platform.
This is the start of a process and there's obviously a lot of work ahead of us. However, prioritizing a single language will enable us to turn GNOME into a compelling platform for application developers in a much more effective and efficient manner.
(Anonymous)
2013-02-02 02:15 pm (UTC)
- Did you guys choose a JS interpreter yet? Or do we use that API-incompatible unsupported mess that is GJS? Do we make a platform library out of it?
- Does this mean we will slowly port existing applications to Javascript? Will new GNOME apps have to be written in Javascript?
- Does this have any influence on introspection? Will introspection gain prototype-based inheritance? Or is introspection still lowest common denominator?
- You cannot write any library in Javascript. So I guess C is not just for "system libraries", but for all libraries?
- Will the libraries be tailored more towards Javascript or will stuff still randomly SEGV if you do something not quite right?
treitter
2013-02-02 05:46 pm (UTC)
There's no immediate change planned here. We'll continue using GJS.
Some application maintainers may choose to port to JavaScript, but it will be optional and I don't expect any of them to be ported in the near future. New core GNOME apps should be written in JavaScript, but we're mainly targeting third-party app developers who are new to GNOME in the first place. We didn't make a strict decision that only JavaScript-based applications would be considered for inclusion in GNOME.
I don't think this is affected.
Sure, C is recommended for any libraries recommended to be shared by other modules (which is essentially what I meant by "system libraries". But if applications ship an internal library written in JavaScript, that'd be fine.
I don't think we would make any changes to g-i or the way we write libraries in a way that would be incompatible for the other introspected language bindings.
If you're getting segfaults from JavaScript applications, that sounds like a library or interpreter bug.
Edited at 2013-02-02 05:56 pm (UTC)
(Anonymous)
2013-02-02 02:52 pm (UTC)
You might see a lot of fart apps, online TODO webapps, and local webapps (wtf is this BTW?) written in Javascript, but serious people just laugh.
I agree with the anonymous poster above
(Anonymous)
2013-02-02 03:07 pm (UTC)
And I understand that. I understand also what you explain in the beginning of your post: there has to be "a language", to avoid confusion for newcomers. There has to be consensus inside so much diversity. I agree.
But the decision you made I think has been the worst of the ones that you could have possibly had done. Seriously, if I were to choose such a crappy language, I would have come around again to the initial question and said: ok, maybe instead of choosing one language between hundreds of languages, why not choose 2? It would still mean focusing more, 2 is much less than the number of languages/platforms that are out there (around the Gnome ecosystem).
And then if you do that, you could choose a 2nd language that overcomes the disadvantages of the 1st selection: poor OO paradigm, dynamically typed, garbage-collected (runtime required)... How about if the 2nd is Vala?
Just my 2cents as always.
Thanks for spending your time improving the ecosystem in the hackfest, guys.
Python
(Anonymous)
2013-02-02 03:01 pm (UTC)
Is not only a great language per se, but also widely used everywhere.
Still, as you said a decision had to be made, so props for making one!
Now we have to try to make that language the perfect citizen for GNOME development :)
Gil Forcada
Re: Python
treitter
2013-02-02 06:11 pm (UTC)
Thank you for recognizing the importance of promoting a single, coherent stack.
SRSLY?
(Anonymous)
2013-02-02 03:30 pm (UTC)
Vala was specifically designed to work flawlessly with GObject and it's so close to Java and C# that any developer can learn it in a day. But you chose JavaScript, a language that uses a weird prototype object system that is inherently different from the object model of the GNOME libraries.
Seriously, what were you smoking?
Re: SRSLY?
treitter
2013-02-02 06:17 pm (UTC)
The language syntax-level differences between Vala/C#/etc. and JavaScript really aren't as big as people like to make them out. JavaScript on top of GObject might not be quite as clean today as any of us would like (we certainly considered it a negative when evaluating our options), but it should improve significantly when ECMAScript 6 is finalized and the JavaScript world moves on to it.
There's absolutely no excuse for this. You're putting down everyone who was involved with the hackfest who put a lot of effort and knowledge into this choice. I have no problem with you disagreeing but there's no reason to be so hateful (and it doesn't help your argument at all).
Heh, intersting choice.
(Anonymous)
2013-02-02 04:05 pm (UTC)
I strongly disagree with your choice. Not because I don't like javascript, but rather because I think the developer story is quite poor and is not going to be rich anytime soon. It's not even a tooling problem we can easily fix.
Re: Heh, intersting choice.
(Anonymous)
2013-02-02 05:34 pm (UTC)
It offers dynamic binding, polymorphism, encapsulation, inheritance... everything you need for OOP.
It's not like OOP starts and ends with Java and C++, or even with class inheritance.
A choice is a good choice
(Anonymous)
2013-02-02 06:50 pm (UTC)
I think many people in comments is this language is the best, or the other. I have to agree with the choice.
Javascript is becoming more and more popular with the web frameworks and web development these days. So, as *entry* language in the gnome ecosystem, it is a great choice.
Of course, who is actually used to program in the gnome libraries would choose python or vala ... if you want performance, or you like, you can choose C or C++. The ones used to program in java, will choose the java bidings. But the point here is ... to choose a language to make it easy for people to *start* developping with the gnome platform, so that all that n00b kids can easilly create an "hello world" message in a confortable way.
Re: A choice is a good choice
treitter
2013-02-03 03:27 pm (UTC)
Just to clarify, JavaScript application development on GNOME is intended to support applications up to the scale of iOS/Android/Mac App Store-sized apps at least because that's the approximate scale of application that makes sense on the desktop, tablets, and phones. We're not optimizing just for trivial applications.
Edited at 2013-02-03 03:27 pm (UTC)
Just my 5 cents.
(Anonymous)
2013-02-02 07:06 pm (UTC)
Anyway, thank you very much "Treiter" for your time and effort spent (and that of others involved as well) to improve our beloved Gnome.
And, Man, Gnome OS will be fucking awesome :)
Re: Just my 5 cents.
treitter
2013-02-03 03:28 pm (UTC)
In balance, a good decision
ext_1629992
2013-02-02 09:33 pm (UTC)
I've oft lamented that Gnome/Gtk+ apps written in Python use a chaotic mixture of Gnome Platform and Python libraries, whereas in Gnome apps I write I prefer to use only the Gnome platform (where possible). In fact I've been spending some time recently porting a PyGtk app to PyGobject and the next items on my to do list are to switch from using Python API's (i.e. Pickle) to using Gnome Platform API's (i.e. GSettings).
Having a small, popular, high-level language which makes use of the entire platform is a fine goal and for that, and the increasing popularity of the language, JS seems like a good choice.
At first I was a little put-off by the statement "We will encourage new applications be written in JavaScript." however, I realise this just ties in with the idea of promoting JS as a first-class citizen in terms of documentation and tooling.
A sensible decision, I think, despite by dislike of JS. I look forward to seeing how this decision affects the Gnome developer experience, particularly tooling!
Re: In balance, a good decision
treitter
2013-02-03 03:30 pm (UTC)
Discussion question
philip.withnall.myopenid.com
2013-02-02 10:02 pm (UTC)
As an example, this is the kind of thing which I'm interested in: http://fedoraproject.org/wiki/Features/S
(Note: linting is not the same as static analysis. Linting is useful, but has limitations.)
Re: Discussion question
treitter
2013-02-03 03:52 pm (UTC)
I'm not personally an experienced JavaScript developer (more C, Vala, Python, etc.), so maybe others can point out other areas we can bridge the gap between static and dynamic languages. I'd certainly welcome that.
I strongly disagree with the decision
(Anonymous)
2013-02-02 10:22 pm (UTC)
I strongly disagree with the decision. Just to give you some feedback based on my personal background (so maybe you could see why I'm a gnome user but not a gnome developer): I am a long time (amateur) developer. I've developed with GTK+, Gtkmm, Cocoa, some Windows stuff that I've forgotten, mostly C++, some experimenting with the D programming language and python, and some Java courses.
I've never developed with Vala, C#, JavaScript, or Go, but I've looked at each of them. I've never even done a whole app in python, just some Blender scripts.
I'm a long time Gnome user. I used KDE at first, somewhere around the year 2000, but I was unhappy with its design. I tested almost all of the alternatives too, but always came back to Gnome (even if it was not perfect!)
When Unity came, I found it to be awfully designed (and buggy). But... I really liked Gnome 3 (or Gnome Shell). It had its bugs, but it was greatly designed. I still have to tweak it (three round ubuntu style close etc. buttons on the LEFT side of the window header), but it is almost as good as Mac OS X! ;) And in some ways it is better.
But the Gnome developer story has never appealed to me. I didn't like C. I liked C++, but Gnome had so much better design than KDE, that as a user I chose Gnome.
Anyway, I'll probably keep on using C++, but I think Gnome should go with either Python or Vala. JavaScript has such a bad reputation, even though Gnome shell is great. And I think that a reputation in programming languages is usually a very good metric on deciding what is good and what is not.
There's a lot of experience with Python on Gnome, and I associate it as the semi-official language of Gnome. (And hey, Blender uses it!) I would never touch it myself, but it should be the language of Gnome.
Re: I strongly disagree with the decision
(Anonymous)
2013-02-03 12:04 am (UTC)
BUT ... i think they intent to publicit javascript for new comers ... the old developpers already know gnome's corners so they can use what ever they like (c, c++, python, vala, java, C#). To make it easier for new developpers they will improve javascript documentation and tools, so that new developers can adapt easilly to the gnome platform (not only gnome, but mostly glib, gonject, gtk+, and so on). The reason to use javascript is because it is widely spread now, with so much web development.
Later, even the new developers will be bored with javascript and use other binding,
a wise, intelligent decision
skierpage [skierpage.com]
2013-02-02 10:57 pm (UTC)
I look forward to the next part of your process where GNOME delivers kick-ass compatible implementations of the additional Web APIs developed by Blackberry, Mozilla, Tizen, WAC et al for audio, camera, filesystem, notifications, sensors, etc. that are slouching towards standardization. Every computing platform that isn't Apple and Android is saying "Write HTML + JavaScript + CSS apps for us". It's only Linux desktops that persist with the fantasy that offering a multitude of languages and a bunch of Linux-only APIs will somehow deliver lots of competitive applications. Be realistic and humble and seek compatibility with all the other also-rans.
My only frustration with JavaScript apps is how they are tied to privacy-sucking web sites. There's no reason why a photo editor, text editor, ToDo manager, etc. has to involve logging into some social web site. _That's_ where free Linux desktops bring real value.
Good luck!
jewelfox.dreamwidth.org
2013-02-03 12:17 am (UTC)
Tell me what I or others can do to help with writing the developer documentation going forward, and how much of my and my mentor's work can be reused for it.
ext_1629969
2013-02-03 12:37 am (UTC)
I know that Jakub was working on switching the documentation platform to using Mallard. We should probably figure out how to properly do this work. I'm clueless, but I can help coordinate.
Compelling choice
(Anonymous)
2013-02-03 10:12 am (UTC)
Re: Compelling choice
(Anonymous)
2013-02-03 12:51 pm (UTC)
Exciting times
https://www.google.com/accounts/o8/id?id=AItOawnlCsvETtcqr4BW9je4_dYB18rFMFYZDP0
2013-02-03 11:01 am (UTC)
Making decisions is hard. There will undoubtedly be people who disagree with the choice of language. You can't avoid making decisions if you want to make progress though. The worst outcome would have been no decision at all.
Other languages will still be available, of course, and the work that members of the community do to support those languages will continue to be valuable and important.
Cross-platform apps
(Anonymous)
2013-02-03 07:02 pm (UTC)
When I have to develop an application, I never develop it specifically for a given platform because I never know which platform my future clients will be using. So, currently I use Python 2.x and GTK...
Re: Cross-platform apps
(Anonymous)
2013-02-04 10:19 am (UTC)
Holy crap at the negativity
(Anonymous)
2013-02-03 10:20 pm (UTC)
That said, bringing JavaScript up to speed is going to take some work. However I fully believe you guys will be capable of it. Keep up the great work!
Porting apps
(Anonymous)
2013-02-04 05:11 am (UTC)
YAY for JavaScript
(Anonymous)
2013-02-04 07:52 am (UTC)
GNU Guile
spectrumgomas
2013-02-04 12:09 pm (UTC)
Re: GNU Guile
(Anonymous)
2013-02-04 05:49 pm (UTC)
Indeed
ext_1632918
2013-02-04 01:46 pm (UTC)
I have tried to help several such new comers to GNOME/Gtk+ during last year and I have encountered several other problems, who aren't related with popularity programming language brands at all. For example, GObject Introspection - while moving fast forward, there's still lots of things which don't work, or don't work properly. Also another "popular" platform/language like .Net/C# - it's bindings for newest GNOME/Gtk+ libraries are seem to be lacking, and Gstreamer 1.0 support is absent. Does anyone know can C# have proper GI support, is it even possible? (Not a rethorical one, really want to know :)).
Of course, this is not biggie - everyone who wants to see to have Python or Vala equal footing can vote with his code/edits/patches. However, I still don't fully buy this. But decision is decision.
Re: Indeed
treitter
2013-02-05 01:19 am (UTC)
This point came up a few times in our discussion. New developers not knowing the language already wouldn't, in itself, wouldn't disqualify a language. After all, they're still going to need to learn the GObject system and the libraries built on it. And Objective C being only used around Mac and iOS development didn't stop the iOS app store from exploding in popularity. Not to mention plenty of people (including a significant chunk of our developer community) are already familiar with Python.
But there's a big difference between "new developers don't know our language (but we have all the tools and docs they need inside and we have a huge pool of people already familiar with it)" and "new developers don't know our language (and we have limited tools and only a small number of people within our community are already familiar with it)"
Ambiguous feelings
ext_1633458
2013-02-04 06:02 pm (UTC)
You guys just become incompetent
(Anonymous)
2013-02-04 06:54 pm (UTC)
Re: You guys just become incompetent
treitter
2013-02-05 01:20 am (UTC)
Great for portability
ext_1633627
2013-02-04 07:08 pm (UTC)
techkitsune
2013-02-05 12:09 am (UTC)
You guys pretty much handed the Linux market over to people like me. You've screwed up and you're about to get a Sony-style lesson in your stupidity.
Pardon me while I roll out some testable code on pastebin for Anon to have fun with.
What's really sad is I warned you people about this long ago. Like, right around the time JS actually became something, about a decade ago.
Those who refuse to learn from history...............
treitter
2013-02-05 01:31 am (UTC)
...er, what?
So you're going to threaten us with DDOSes and other anti-social behavior for trying to move our project in a positive direction? That's psychotic.
If your "warning" (about what?) looked anything like the comment just now, you'll have to forgive us for not understanding or agreeing or taking you seriously.
I think this is just a joke
(Anonymous)
2013-02-05 01:55 am (UTC)
Re: I think this is just a joke
treitter
2013-02-05 03:47 pm (UTC)