Hacker News new | ask | show | jobs
by toyg 3860 days ago
It happened before, with the transition from Mozilla Suite to Firefox. And let's be honest: XUL was just lipstick on the pig that is cross-platform development. HTML/CSS/JS are now fast enough to look like a slightly better pig, so here we go.

Also, there's a generational shift underway. You and me could find crazy that people would openly choose to use IDEs built on HTML/CSS/JS, but that's what a lot of young folks are doing (Atom, VSCode etc etc). That's their world, that's what they like. An entire generation now exists, who learnt to code from web scripting rather than C or BASIC. They have taken over. It's just how it is.

(this said, I agree that donating to Mozilla feels a bit silly, looking at how much money they make from commercial agreements. It's like donating to Ubuntu or RedHat.)

8 comments

I'm all for writing new apps in HTML, I think Atom and VSCode are awesome, but I'm not for rewriting huge legacy apps to be HTML apps for no good reason. The reasons given, that XUL requires maintenance that Mozilla engineers don't enjoy doing, is a joke considering the amount of effort to maintain XUL is less than 1% of the amount of effort to move Firefox to HTML.

No one has listed the ten awesome features that we're going to get from HTML Firefox (cause there ain't many) or the 1,000 features (tons of little details) that will be lost. If users listed their 10 biggest problems with Firefox I doubt any of them would be solved by moving to HTML.

Imagine if instead of writing VSCode from scratch and releasing it alongside Visual Studio Microsoft had rewritten the Visual Studio UI in HTML, abandoned all the nonessential features, and abandoned the old native Visual Studio.

One might say that Mozilla will wait to release the new Firefox till it has all the old features of the old Firefox, but that's not been my experience with how teams work. They'll get frustrated with the rewrite and want to get it out the door. "We can add those features later" they will say, and then they'll never get added.

> The reasons given, that XUL requires maintenance that Mozilla engineers don't enjoy doing, is a joke considering the amount of effort to maintain XUL is less than 1% of the amount of effort to move Firefox to HTML.

Ah, but maintaining XUL means working on old code (which is boring), but moving Firefox to HTML means working on new shiny code (which is exciting).

https://www.jwz.org/doc/cadt.html

Well, or Firefox as a web browser has to render HTML/CSS/JavaScript no matter what, and now that HTML/CSS is at feature parity or better with XUL in the space XUL is meant to occupy, it doesn't make sense for Mozilla to maintain two competing technologies when one receives 95% of their internal developer attention and 99.99999999999999% of external developer attention.
But, sadly, they aren’t replacing XUL with HTML.

Instead, they plan to render the UI natively, with only "some" parts in HTML.

So, instead of XUL + HTML, we’re going to get GTK + WinForms + Cocoa + HTML. Great, eh?

And we lose the ability to style it with addons – your themes can only change the background image of the header bar, that’s it.

And the remaining addons can’t modify the UI (tree style tabs, bottom tabs, etc) anymore either, instead you can only modify page content.

I’m seriously pissed off now, because Firefox was the last browser where I could actually customize it how I liked it.

I hope the person who made this decision is going to have to use software without any config options and with horrible defaults, like GNOME. For the rest of their life. May their car always have have either 60°C+ heat, or -20°C AC, may their screen of their phone always either be too dark, or too bright.

Yes the plan is to replace XUL with HTML. I have no idea where you heard otherwise.
> Part of the decision has already been made. We are moving Firefox addons (themes and extensions) away from a model where you can perform arbitrary styling or scripting of the browser chrome. This is an engineering-driven decision, and it's unavoidable and necessary for the long-term health of Firefox. Not only are we moving Firefox away from XUL, but we are likely going to make significant changes in the way the UI is structured. It is likely that some parts of the UI will be implemented using native widgets, and other parts will be implemented in HTML, but the exactly DOM structure may involve independent connected with well-defined API surfaces.

Official statement from the Mozilla post in the discussion regarding removal of support for "heavyweight" themes. Emphasis mine.

That’s a pretty clear statement that it won’t be 100% HTML.

Also, the fact that "arbitrary styling and scripting" won’t be possible is another issue.

Tell me how I am supposed to write an addon that adds tab-previews as thumbnails when you hover over a tab like Vivaldi is doing it: http://i.imgur.com/vqysJs1.png ?

How am I supposed to write an addon that colors the navbar and the current tab in the theme color given by the HTML, or, if not existing, the favicon?

With current addons I can do that, with the new addon system, I’m seriously fucked.

You're citing jwz's CADT post in a thread discussing Firefox? It's a product for which people regularly complain about open bugs that are 10 or more years old.
Killing XUL has the potential of killing Firefox. I bet the last good XUL version will be forked.
It essentially already has http://www.palemoon.org/

The Palemoon developers understand the folly of ditching the flexibility of the XUL interface. They won't be removing it.

And then the person who forked it gets to maintain it!

Lucky them.

No need to be so snarky, he'll have all those other people out there who love XUL to help him.
He's right. Mozilla, a $200-300 million a year outfit, currently maintains their software including Firefox. It's a huge C++ application. People who code XUL in their spare time, even a bunch of them, aren't likely to make a dent in keeping parity between a Firefox fork and the main release. They'd likely have trouble even porting it.

So, a fork is a rough solution and will have maintenance issues for an app this size.

As an active user of Thunderbird I am very disappointed with these news.

But these rants are just silly. XUL is a technology that needlessly duplicates what HTML/CSS do these days. And if you ever want to have a smooth transition to servo, which solves real, deep problems, having a html UI is going to be dramatically important.

I really want to agree with you that Atom is awesome, and it is, in principle, but in reality a text editor should not be using 300MB of RAM. Sublime Text, which I consider to be a direct competitor, barely uses 20MB of memory on my machine even after hours of use. Heck, does Intellij even use that much memory?

I'm just really discouraged with how more and more desktop apps are being written in HTML, CSS and Javascript and suffer in quality as a result.

Considering my first 16 Bit computer had 3MB RAM and ran MS Word alongside a GUI, I am wary to say "Amount X of RAM is preposterous for a given task".

As long as Moore's law provides enough lift under our wings, RAM usage is one of the less important aspects of an application. However, I fear the trend of building application UI's in HTML/CSS because invariably it will lead to wildly inconsistent look, feel and behavior.

Reminds me of the quip that goes something like this: "What's the best way to save 10 dollars? Earn 10 dollars more."
Eight Megabytes And Constantly Swapping used to be a joke.

Sigh. I feel old.

IntelliJ has something between 100mb and 700mb depending how much projects you have open and what language you use.
It's worth pointing out that for a couple of years Mozilla has been building a replacement for their rendering engine (Servo), so I imagine that to some extent deprecating XUL now is preparation for not having to re-implement it for Servo. Just speculation.
> One might say that Mozilla will wait to release the new Firefox till it has all the old features of the old Firefox, but that's not been my experience with how teams work.

Realistically, getting to feature parity after rewriting a core part of any application is going to be nearly impossible. You end up with different features, hopefully better ones, but not exactly the ones you had before you started. You can't step twice in the same river.

> You and me could find crazy that people would openly choose to use IDEs built on HTML/CSS/JS, but that's what a lot of young folks are doing

I'm 25 and I feel to old for this industry already.

What bothers me about being older is my first browser was Internet Explorer, then I got to play with MOSAIC's slow arse in school, then used Opera/Mozilla, and so on. Got to see where it came from. And the new stuff, especially Firefox, is coming full circle in how friggin' slow they run to serve the lowest common denominator of web pages.

It's annoying. I miss Web 1.0. Add just a bit of dynamic functionality plus broadband and it would be fine for 80-90% of cases. And FAST!

Instead, we get Web 2.0, 3.0 (4?) which makes pages on 40-50Mbps load like my old 28Kbps modem on AOL. Seriously...?

> And the new stuff, especially Firefox, is coming full circle in how friggin' slow they run to serve the lowest common denominator of web pages.

It should be easy to find performance numbers showing how Firefox 42 renders old, pre-CSS pages slower than, say, Netscape 4, then.

Netscape 4 didn't have a JIT, didn't use hardware accelerated layers, trapped into kernel mode for GDI calls, didn't use accelerated SIMD for painting, and didn't have HTTP 2. It barely had any optimizations for dynamic restyling, so tons of stuff would get reflowed when it didn't have to. This is just the tip of the iceberg.

Browsers have gotten more complex, but the complexity is often in the service of making things faster.

Notice my references to Web 1.0, 2.0, etc? That means my comment was talking about not just the browsers but the sites designed for them. The combination of the two have made web sites really slow that could be designed to load up instantly. Instead, they load up as slowly as some sites did on my old Pentium 2 running Opera, etc. You'd think they'd be significantly faster with all the Moore's law iterations and browser improvements. Modern sites make sure that doesn't happen, though.

And I never mentioned Netscape: it was called Netscrape then and hackers despised it. I used Opera and IE mainly.

Opera and IE were no different in architecture.
What are you referring to? Opera and IE certainly used different rendering engines: Trident for IE, Presto for Opera (before it moved to Blink).
Wasnt aware of that. Interesting.

It was just faster, better looking, and skinnable. Plus malware stayed hitting IE so there was that too.

Disable javascript. Seriously.

Disabling js has given me the fastest turn-round on page-load times. It's usually not the browser, but loading 15 different un-optimized JS engines that causes the problem.

I use NoScript. JS heavy sites are the worst though.
I am 29, started coding at 14, I've built UIs based on mIRC Scripting, VB/Winforms, C++/Qt, C#/WPF, Java/Android layouts. Using IDEs such as Visual Studio, Eclipse, Qt Creator and Android Studio.

I must say: Atom Editor is great. Using HTML/CSS/JS to build desktop/mobile apps really makes sense to me, especially given that:

- You only have to support one rendering engine. - You have access to the latest Web Components/ES6/CSS3 features. - You can rely on native Node.js modules when needed.

It's good for portability, HTML/CSS became better at UI, JS becomes a better language, current IDEs are great, live debugging tools are great.

You also forget:

- There are far fewer native components, leaving accessibility down to the developer of the app and making it nonexistant.

- Platform integration is impossible, which means there is no way for the framework, for example, to create widgets differently on OS X, Windows or Linux (these platforms have many different conventions)

- Theming globally becomes impossible. If you want to write a dark theme for your desktop, you go from writing a theme once for GTK and once for Qt to once for each and every app you run. Uuuurgh.

But only supporting one rendering engine, yay! Much better than the 6 different engines we have to support in Qt (huh?).

And having access to all the latest JS additions! ... that were copied from other languages you could develop desktop apps in, because JS is a terrible hack.

And relying on native Node.js modules, yay! As opposed to native modules for literally every other better language out there.

I'm not sure what you're actually comparing this workflow to. Maybe one day writing HTML apps will be great, but today is not that day. Today, writing HTML apps is only beginning to be an idea that doesn't completely suck. But for the user, it does massively suck. Massive apps that ship their own copy of webkit/blink/whathaveyou, with security flaws that won't get patched, disgusting performance on low-end hardware, atrocious battery usage and decades of UX knowledge thrown out of the window just because the app developer doesn't have the knowledge to see it.

I don't look forward to this. And I'm younger than you.

> "Platform integration is impossible, which means there is no way for the framework, for example, to create widgets differently on OS X, Windows or Linux (these platforms have many different conventions)"

So web apps can't have reusable components now?

> "And having access to all the latest JS additions! ... that were copied from other languages you could develop desktop apps in, because JS is a terrible hack."

WebAssembly will take over for web apps eventually.

> "decades of UX knowledge thrown out of the window"

UX knowledge isn't toolkit dependent, UX knowledge is just as applicable on the web. You can make a dog of an app with any toolkit, native toolkits offer no guarantees for good UX, you can only hope that designers choose to follow best practices.

> So web apps can't have reusable components now?

I'm not saying they can't, I'm saying they don't. You go ahead and try to fix that, create widget#772981 that still won't support typed-selection, or will break with large text or what not... I've seen too many of those, most of them bad, and none of them standard. So far, React is the only thing that even comes close to a sane model for a contender to UI development on the desktop, and it still mostly fails the accessibility checkbox.

> WebAssembly will take over for web apps eventually.

More eventualism. Do you have evidence for that? Do you even have evidence that it'll be better than what we have now in other languages if it does take over?

> UX knowledge isn't toolkit dependent

A lot of it is. You'd be surprised just how much UX is crammed into Qt Widgets for example. Years of experience making them more accessible, more usable, more consistent with the platform they're running on, etc.

> "I'm not saying they can't, I'm saying they don't."

They already do. Electron, Web Components, etc...

> "Do you even have evidence that it'll be better than what we have now in other languages if it does take over?"

Compare the performance of vanilla JS vs. asm.js. It is clear from what developers have stated that WebAssembly performance will exceed the performance of asm.js, the threading improvements alone should offer noticeable benefits.

> "Years of experience making them more accessible, more usable, more consistent with the platform they're running on, etc."

So what are we looking at to replicate that? A theme per platform? Some accessibility work? What else?

It should be noted that the web isn't starting from zero with UX either, we've already had 20+ years of refinements to the web user experience.

>I'm not sure what you're actually comparing this workflow to.

He is comparing it to what they have now, XUL + CSS + JavaScript. Replacing it with html isn't as big a change as it sounds, their UI is already written in XML and rendered by Gecko, all they are doing is moving from a custom XML like XAML(MS) or FXML(Java) to standard HTML rendered by Gecko.

Unlike you know something I don't about Kunix specifically, I don't think he's talking about Mozilla development in particular, but rather development in general.
In that case, could the XUL dependency be removed from Thunderbird?
Unlike the original parent post I don't think this announcement anything to do with XUL. Thunderbird just doesn't have the userbase Mozilla expects it to at this point because, surprise, the people who want an email client are a small subset of the people who want a web browser.

<rant>

This is lost in a sea of replies now but I'm sure pissed off Mozilla is completely losing their root mantra of fighting for the free web. Persona, Thunderbird, two critical components of a "free web": free global authentication, free email client. I'm sure next mozfest the same suits as every year will talk about how they're so proud of "keeping the web open". What a crock of crap. Firefox isn't even that good of a browser anymore.

</rant>

I don't see why it couldn't, they are doing it for FireFox. On the other hand Mozilla has been on the path to retire Thunderbird for some time, this is just the next step.

Mostly I think it is an effort vs reward thing. Thunderbird doesn't have the user base and doesn't have a revenue stream the way fire fox sells the search box. I wonder if anyone over there has thought about cleaning it up and selling it as a white label email client.

> - You only have to support one rendering engine. - You have access to the latest Web Components/ES6/CSS3 features. - You can rely on native Node.js modules when needed.

So, developer convenience trumps user experience? Who cares about your battery run time, how hot your PC runs, the bandwidth overhead, the massive attack surface from all the useless components shipped, how badly the webapp integrates into your OS, as long as we can ship faster and faster?

As a user, my experience with HTML/CSS/JS apps is great. Look at the excellent feedback the Atom Editor is getting.

As a developer, I feel that it's easier for me to create good user experience (nice UI, easy non-blocking I/Os by default, etc).

I don't say it's flawless, I say it's now becoming a very good alternative.

Oh, I'm writing web apps myself, but Gods, am I hating myself for it. OS integration is somewhere between a nightmare and impossible – and yes, it is desirable, unless you're on like Gnome 3 –, the resource requirements are abysmal (400 MB for an app that consists of a single input form, a table, and a search field, really Chrome?), performance is actually pretty lacklustre (non-blocking is one thing, actual multithreading another!), the UI isn't actually all that nice if you want to use it, not just look at it (say goodbye to accessibility; hell, even just proper keyboard navigation is black magic for most frameworks); and if you ship the engine yourself, you're now responsible for orchestrating and shipping bi-weekly browser updates to your customers to make sure your browser engine stays patched.

Is all that bullshit really worth… whatever we're saving? (Our company is mainly saving in developer salaries, because we can force kids fresh out of school to work for minimum wage, instead of hiring experienced developers… we'll see how long this keeps working.)

> As a user, my experience with HTML/CSS/JS apps is great. Look at the excellent feedback the Atom Editor is getting.

For some less positive feedback on Atom, which reinforces some of creshal's points, see the Atom section of this text editor rundown:

http://eev.ee/blog/2015/05/31/text-editor-rundown/

I've also frequently seen complaints to the effect that Atom is much too slow, even on machines only a few years old. Even my 486 laptop back in 1997 could run a text editor with syntax highlighting (specifically, JPad for programming in Java). What are editors doing these days that needs so much CPU power?

> For some less positive feedback on Atom, which reinforces some of creshal's points, see the Atom section of this text editor rundown:

> http://eev.ee/blog/2015/05/31/text-editor-rundown/

This review (6 months ago) is based on an early version of Atom Editor (0.204.0), the latest stable (1.2.4) is way more mature and provides very nice packages [1].

[1] https://atom.io/packages

JavaScript programmers are truly delusional sometimes.
It’s not really JavaScript, I’d argue it’s a different reason.

node-webkit apps are cheaper to develop. Far cheaper.

Everyone can write a webapp, a native application requires professional developers. The payroll looks completely different.

And then the devs who have only worked with node-webkit don’t know how much better they could have it. I know devs who refuse to use map, reduce and filter, because "it’s black magic and we always used for".

The fact that you are being(edit: was) downvoted for constructive opinion shows unwarranted prejudice of HN hivemind towards web technologies. HN discussions on this topic are effectively useless, any constructive truth finding is drowned.

edit: I'll take my downvotes with pleasure. The fact that I am able to use Atom or Nylas N1 or Nuclide on linux with 0 problems alone is enough to welcome proliferation of web tech on desktop.

Your decry of prejudice would be more believable if it weren't only unsorted generalizations (i.e. prejudices)
Thanks for your support of N1. :) Feel free to ping me if you have feedback. I'm mg@nylas.com
Same here, I'm 26. The industry has changed a lot when people realized you could make a shitload of money with the web/scripting stuff. Coding schools, open source communities and huge companies love HTML and JavaScript and Python and Ruby for their simplicity. Just take a bunch of people, tell them they could make a lot of money by learning some dead simple languages and there you go. Doesn't matter if they write the most disastrous code in the whole universe.

Look at Code Academy, for example. They add new programming languages and technologies every now and then, but basically it's always the same. Just like their audience. They won't add C to that list, because that wouldn't work for this average not-nerdy-enough-for-real-programming audience.

Yes! JS, Python and Ruby are just "dead simple" "scripting" languages that only serve to "make a shitload of money" and aren't "real programming".

Real programmers (like me) use C.

Seriously, no. Just no.

And if I wanted to prevent people from writing "the most disastrous code in the whole universe", teaching C instead of JS would be much, much lower in the list than teaching how to split code into modules/libraries, write testable code, etc.

> And if I wanted to prevent people from writing "the most disastrous code in the whole universe", teaching C instead of JS would be much, much lower in the list than teaching how to split code into modules/libraries, write testable code, etc.

And for me that would be much much lower than teaching how to keeps things simple. The whole modern web has a bad case of over engineering, everything is modules of modules of modules, with so many tools associated you get a headache trying to install a simple JavaScript library (what is wrong with a download link and I drop the lib on my page, nothing that is what).

I'm all for modern approaches but I can't help but feel many developers have lost touch with what writing clean code is, it's not making module, libraries or even tests, it's making sure what you are doing is as simple as it can be and efficient at it. Sadly most modern web stack fail at that. All hidden in mumbo jumbo of modules and dependencies no-one really needed or asked for, often created by people who never questioned the purpose of what they were doing, or if the whole internet needed it (because you are at Google and have found a neat way to deal with your huge JS stack doesn't mean the whole web needed it too, and that you needed to spent a whole lot of effort making people adopt it).

As much as you make fun of C, learning and writing C will teach you to keep you programs simple and efficient, because the language requires it. And that's coming from someone who started programming with Perl, then PHP, and only learned C later on.

Makes thing simple not simpler should be the cardinal rule of programming, not modularize and test everything, those are situational, the former applies all the time.

> As much as you make fun of C

I didn't make fun of C. I made fun of a comment posted by a C programmer, which is very different. I have absolutely nothing against C.

> C will teach you to keep you programs simple and efficient, because the language requires it

From what I've read, the OpenSSL codebase is definitely not simple, and I'm not sure it's efficient either—it would depend on how you define efficiency. So your affirmation seems factually incorrect.

Other than that, I agree with your post. Simplicity is awesome. No point in using Angular to build a landing page if static HTML can do the job just as well. (Edit: let me take that back. There can be a point: the pleasure of experimenting and learning something new.)

Learn C, use python/go/whatever for most tasks.

C teaches you how stuff works. Its important.

Question coming from a long-time sysad whose experience is almost entirely batch and PowerShell, what does it mean to write "testable" code?
You write code that can be broken up finely enough into discrete, stand alone modules that can each be run through a series of tests.

For instance, you might create a model class, and then you know that model should have a name, shouldn't be able to be saved without a name, the name should be x-number of characters.

Then you can write a series of tests that makes sure that, regardless of how the model implements that name, all your assumptions about what that name should look and act like don't change without throwing a red-flag up to whoever is changing that model.

Say you want to test how a program fares when strings are malformed, or the disk is full, etc. It can be hard to simulate this if the code refers to variables and results from functions from all over the place.

Making code into reusable modules code is generally a good thing, but it's even better if you make them in a way that will help you test those chunks independently as well - that is testable code.

Usually it's about keeping it granular enough that various sub-activities can be tested in isolation. If you have one function with 10000 LOCs, that's not really testable beyond "something doesn't work".

Then of course you need some way to automatically run these tests, but that's usually provided by IDEs or standard libraries these days.

Edit: most curious downvote ever...

Obligatory because of "real programming" reference:

https://xkcd.com/378/

The only good thing (I think) of a generalist is that one is used to adapt, but yeah... it gets boring sometime. Although after a while, is interesting to see how we reinvent wheels and show them with a new fancy name, it is a pattern that you would see more or less each 10 years.

Sometimes it feels like everything was already invented in the 60's.

> Sometimes it feels like everything was already invented in the 60's.

Reading up on the capabilities of early mainframes is eye-opening if you (like me) grew up on Pentiums.

>Reading up on the capabilities of early mainframes is eye-opening if you (like me) grew up on Pentiums.

Close enough... I grew up on XTs, i286, i386, so on :) All of them way weaker than my phone (Not sure if that was what you were referring to).

However, in terms of architecture, algorithms, programming language features... It feels like we haven't advanced too much. Actually, the opposite... we are encourage now to do not be too clever on programming because processing power and memory usage is close to be a commodity and clean code is more important (which is fine but less fun).

Referring to architecture, algorithms, language features, etc obviously. They were all better on many machines from 1960's-1980's. Market kept rejecting anything that wasn't backward compatible with existing garbage and had max performance per dollar. So, dumb CPU's, COBOL, and C it is. :)

Gave examples of what features old ones had in the essay below with the first link mentioning the specific systems for further inspection:

https://www.schneier.com/blog/archives/2014/04/dan_geer_on_h...

Note: B5500, System/38, and Ten15/FLEX are all especially worth considering. Two were basically HLL machines with type-safety and interface safety enforced at hardware level. System/38 was object-based with HW- and SW-level protections plus portable microcode layer.

I'd say Channel I/O counts as one that kicks modern systems' asses. Servers have been copying it bit by bit over past ten years, maybe even exceeding it, but server OS's are inherently inferior in usage given mainframe OS's are designed for I/O offloading at core. Near interrupt-less architecture with acceleration engines makes many apps scream with performance. And would only cost $10 per CPU on desktops but would require Windows & Linux rewrites. (sighs)

https://en.wikipedia.org/wiki/I/O_channel

The modern equivalent to System/38, IBM's POWER hardware running IBM i still has the same benefits. I actually really like the concept and the way the ILE runtime works, but it's too bad that much of the platform is stuck with legacy design decisions and hasn't been modernized.
Yes, especially the MULTICS operating system was so advanced and dozens of decades ahead that we still borrow from its concepts. It had for example 16 security rings. Intel CPUs support only 4 CPU rings, and Windows e.g. uses only 2 rings (for kernel mode and user mode) (hypervisor mode uses another ring in recent iterations).
Initial software based Multics had 64 rings, and as I recall only 8 in the hardware versions. No more than 4 were needed in practice: 0 for root, 1 for mail (e.g. you could delete mail you'd sent to other people from their mailboxes if they'd not read it yet), 4 for normal users, and 5 for some stuff that e.g. allowed anyone to use, but was restricted at touching anything deeper in the system.

AMD dropped rings in their 64 bit architecture which Intel was forced to adopt, so they're becoming a historical curiosity.

> AMD dropped rings in their 64 bit architecture which Intel was forced to adopt, so they're becoming a historical curiosity.

Not quite. Hypervisors are operating in Ring -1, SMM is equivalent to another ring above that, and I can't find anything about AMD64 dropping Ring 1/2? Ring 0/3 at least are still in use.

Could you recommended an overview?
So this generation is rewriting everything that was made and working in the 90s. Was everything written in the 90s also a rehash of stuff from the 70s/80s? Just curious, what was the equivalent of HTML/CSS/JS in the 80s?
In a way, yes. If you look at OS interfaces from the '80s and compare them with modern ones, you'll see a lot of cpu power is now spent on eye-candy but functionally they're not terribly different. Except they're all built on C++, whereas before they were in C or lower-level languages. OO was the HTML/CSS/JS of the '90s.
Could all the large software applications of today have been created without OOP, just on functional programming paradigms? If OOP was beneficial 10 years on, maybe the cross-platform nature of HTML/CSS/JS will also be vital to future applications.
> maybe the cross-platform nature of HTML/CSS/JS will also be vital to future applications.

There are already cross-platform toolkits that can deliver everything a browser engine can, faster and safely.

Face it, "web technologies" are not winning because of any massive technological advancement, just like C++ wasn't this huge advancement over C. They just managed to achieve enough critical mass to make everything else look less popular. In the '90s, OOP did that through academia and commercial push (in what was a much smaller tech sector); html/css/js did it through the accidental monopoly that is the web browser. The end result is basically the same.

LISP, a semi-functional language, was originally invented to solve the biggest, hardest problems. Scheme, Common LISP, Ocaml/ML, and Haskell have all been used in large systems with good performance. Entire OS's were written in LISP's with some benefits that modern machines still don't have:

http://www.symbolics-dks.com/Genera-why-1.htm

Note: And some that are laughably obvious and available today lol.

So, yes, what people use today is an accident of history. That includes COBOL, C, C++, OOP languages, HTML/CSS/JS, HTTP-centric everything, and especially whatever crap is being built on them next.

If you're curious, here's the history I put together on C language and UNIX in numbered list form. You'll see how IT evolution often works in practice to give us lowest common denominator. And afterwards people swear it was product of good design and great achievement. (rolls eyes)

http://pastebin.com/UAQaWuWG

The most remarkable part of "web apps" is probably what they do not improve on:

Smalltalk had (has) messaging and decent object orientation (and you have that especially in latest js) - but Smalltalk never had one standard vm implementation - different versions had different image (ram-saved-to-disk, source code and byte-code) and vms. Javascript has common source code, but no common vm/image format.

Office Suites had rich documents with smart(ish) widgets, but no security - a macro in Excel had access to all your spreadsheet data. Web apps don't really have any good encapsulation either -- so we'll likely repeat the macro-virus era with web virus era (I'm not sure if we already are or not, there's certainly been a few self-replicating ones, that eg spread via facebook updates etc. Not sure if they generally live in the phone-apps or various web-apps. Probably both).

We already had the future of web applications within reach years ago - but apparently no-one cared: http://lively-kernel.org/

> what was the equivalent of HTML/CSS/JS in the 80s?

Depends what are looking as an equivalent. Browsers didn't exists but markup languages have been around since the 70's (mentioned for first time in late 60's)[1]

Maybe an equivalent to express GUI as resources? yeah, we called it RAD back in the day and they were quit popular among some circles. Does somebody remember Hypercard? Or even the first versions of Visual Basic?

[1] https://en.wikipedia.org/wiki/Markup_language#History

Mainframes and thin clients maybe? "All of the computing power will be over here, and the clients will be dumb and just render stuff!"
Stick around for another 25 like I have...the fun is just starting!
Fun as in yelling at people to get off my digital, hand-optimized assembly lawn?
Written and read in hex code
I still get mad when people talk bad about Fortran and replacing the code with some slow solution. The power of CPU and cheap RAM has caused the world to favor the hand holding of developers.
It is sad to see Web GUIs taking over the native GUIs. Everyone run their apps in a virtual GUI inside another GUI. That's meta-meta-crazy.
There's nothing native about XUL, though.
Atom and VSCode both perfom poorly, and look like garbage on Linux.

Whoa! They have syntax highlighting! And intellisense! And a package manager!

Kind of like Notepad++ or half a dozen other editors?

I'm not saying "we should NEVER use HTML for native dev", but it's not there yet, and I don't understand the hype around these two tools.

> It happened before, with the transition from Mozilla Suite to Firefox.

And it nearly killed them.

http://www.pubarticles.com/member/user_img/216/1279777216.jp...

http://www.joelonsoftware.com/articles/fog0000000069.html

No, what almost killed them was the transition from Netscape Navigator 4.0 to Mozilla Suite 1.0 — that's where the massive rewrite happened. Looking at that first link, it's it doesn't point out where Firefox development started: mid 2002. By that point Netscape had already almost entirely lost all its marketshare.
> You and me could find crazy that people would openly choose to use IDEs built on HTML/CSS/JS, but that's what a lot of young folks are doing (Atom, VSCode etc etc). That's their world, that's what they like. An entire generation now exists, who learnt to code from web scripting rather than C or BASIC. They have taken over. It's just how it is.

They could still be doing it wrong.

Dude, you're likely typing on the "wrong" keyboard layout and use a "wrong" calendar... convention trumps correctness pretty much all the time. What matters is that enough people are doing it to make it "the way". I fully expect that we will eventually see a Javascript OS, because "it's so much easier to maintain".
> you're likely typing on the "wrong" keyboard layout and use a "wrong" calendar

When someone shows me/I find a better way to meet a requirement I will adopt it (static site generators, Go routines, ...). I won't doggedly stick to the first thing I learned; I don't expect the world to adapt to suit me.

We won't, because you can't write an OS in JavaScript; you need native code. Maybe a desktop environment or something, but not an OS.
All languages can be compiled to native code, it's just harder for some. For example, here's an AOT compiler for JS: https://github.com/tmikov/jscomp
It's still a scripting language, and you still can't write an OS in it. There's no low-level access to the hardware. You could of course write all the low level parts in C, but then you haven't written an OS in JavaScript.
C also doesn't have low level access to the hardware. The interesting bits of the OS are written in assembly.
The developer community is a good benchmark. When you do it wrong, people usually don't use your software.
> "You and me could find crazy that people would openly choose to use IDEs built on HTML/CSS/JS"

Why is that crazy? Makes perfect sense to me, especially as the performance of the programming language element improves. Ultimately these IDEs are sure to make use of WebAssembly, which should take away the remaining performance concerns.

It's crazy because, apart from performance concerns (it looks like we love to make our computers slower and slower every 10 years), you're just discarding all the features of the containing desktop OS. Formatted copypasting, usability features, network features, etc etc... you'll have to reimplement them all, solving all the problems that systems developers solved 10 or 20 years ago. The OS will become little more than a very expensive pixel pipe. But that's what people like, because C++ is hard, native widgets are hard to customise, and everyone loves designing interfaces, so that's where we're going.

I anyone ever starts making javascript-optimised CPUs and GPUs, they're going to make billions. At the moment we only have micropython, but who knows...

> I anyone ever starts making javascript-optimised CPUs and GPUs, they're going to make billions.

They said the same about Java in the 90s. Java accelerated CPUs never really took off.

Let's look at the Atom/VS Code use case...

> "Formatted copypasting"

Do you need this for a coders editor?

> "usability features"

Like what?

> "network features"

Which network features do you need for a coders editor? In the case of Atom/VS Code, can't think of a single one that a browser engine doesn't already provide. Not going to need things like AD-integration, etc...

> "The OS will become little more than a very expensive pixel pipe."

If that's what people want, then so be it. I see no problem with simplifying the OS, most of them are already too bloated.

> " But that's what people like, because C++ is hard, native widgets are hard to customise, and everyone loves designing interfaces, so that's where we're going."

The main advantage is the cross platform compatibility. If certain OS vendors didn't make it hard to build apps that utilised a common base then there'd be much less drive to produce web apps. It has very little to do with the complexity of C++.

> "I anyone ever starts making javascript-optimised CPUs and GPUs, they're going to make billions."

As I've said a number of times now, the final target with web apps won't be JS, it'll be WebAssembly.

Not to mention death of accessibility features - those HTML apps are effectively unusable for disabled users because they don't implement accessibilty features available in native UIs.
It's possible to build websites with accessibility features, is it not?
Partially, but the point is that you're (manually and expensively) reinventing the wheel that desktop toolkits had already built for you.
Sure, but with the end benefit being a universal UI toolkit.

Also, 'expensively' is debatable, I'm sure it'd be possible to have reusable accessibility components, wouldn't necessarily have to reinvent the wheel for each new web app.

So we finally have a free choice of OS. It's not the full story to complain about people solving the problems that the OS side had already solved decades ago. The big new thing is that they are doing so in a platform agnostic way. That I have nine different virtual machines installed on four different operating systems and the same code base can run on all of them smoothly.
Except that's not true: Webkit, Gecko, Trident... they are all different "OSs" you're writing for, you just wave them away by shipping the OS with the application. You could do the same by shipping a virtualised image running a stripped-down Linux configured to run only one application. One of these solutions is now socially acceptable, but both manage to completely discard everything the desktop OS achieved in 30 years.
> So we finally have a free choice of OS

Not really, you still a browser that implement all this stuff. The only difference is Open tech vs proprietary.

Open technologies are obviously a good thing. Writing a software as complex as Photoshop for instance with the exact same features with HTML/CSS and JavaScript isn't going to fly and be usable for someone who has to work 10 hours a day on it. The performance issues will be significant. It's not a big deal for an text editor though I still can't open a 5mb log file in Atom for some reasons. No problem with Sublime Text 2 or Vim. Why is this ?

My point is Web techs aren't a silver bullet.

My point wasn't that they are a silver bullet. My point was simply to say that while something is obviously lost (performance, native integration, etc...), something else is gained. And that is massive portability.
s/smoothly/in the same crappy but standardized way/
To be fair, what I have heard (I am not a Mozilla insider so I can't say personally) is that donations go to the Mozilla Foundation and the commercial agreements give money to Mozilla Corporation. So you aren't donating to the same place.

From the same source, apparently the Mozilla Foundation does a lot of important work that the Mozilla Corporation can't/won't do but most of the development is done by the Mozilla Corporation currently (possibly due to not enough donations to the Foundation?).

I haven't really verified that, but thought it was worth pointing out.