Currently, to keep supporting very old browser versions is a burden, whereas I have to constantly challenge the code I write for compatibility with very old versions of some browsers. This also forces to write code which is not succinct, and possibly not optimal.
As a start, only browsers which implement natively the following features will from now on be supported:
| | Chromium | Edge | Firefox | Safari |
| --- | --- | --- | --- | --- |
| Release | Oct. 2014 | Mar. 2015 | Sep. 2013 | Sep. 2015 |
| Map() | 38 | 12 | 24 | 9 |
| Set() | 38 | 12 | 24 | 9 |
| for ... of | 38 | 12 | 13 | 7.1 |
I will not systematically go through all the code to adapt to these changes, but from now on when writing new code I will use these with the assumption the implementation is built-in, native, and I will convert existing code whenever the opportunity arise. I will also remove whatever polyfill code was necessary to keep supporting the very old browser versions.
Just a small example of code for very old browsers vs. more modern ones.
// a Set() collection, filled elsewhere
var aSet = new Set();
...
No for ... of and native Set() support
var iter = aSet.values();
for (;;) {
var entry = iter.next();
if ( entry.done === true ) { break; }
...
}
With for ... of and native Set() support:
for ( var value of aSet ) {
...
}
Does it mean that these are the oldest versions that are supported?
Browser Chromium Edge Firefox Safari
Version 38 12 24 9
Yes, starting with next stable release (beyond 1.12.4).
Good decision! Even then Windows XP and Vista (long ditched by Microsoft itself) will be able to get uBlock Origin:
The only people who really can't get uBlock Origin are OS X users...
Hello @gorhill
Since you explicitly state in this issue that the minimum (legacy) Firefox version that will be still supported henceforth is 24, I'll have you know that I am already having problems on Firefox ESR 24.8.1 (BuildID=20140923194127) with every version after 1.12.5b1; the addon does install, but:
chrome://ublock0/content/dashboard.html#3p-filters.html looks like this (sorry, Greek locale): 
(The above is only part of the tab's content, but you get the idea...)

That's how the whole tab looks like, not a cut out; as you can see, no individual filter lists to select/deselect,
plus Anti-Adblock Killer | Reek list complains that's it's not installed (as the corresponding userscript is indeed installed via Greasemonkey) ...
I can confirm though that uBlock0 1.12.5b3 does function fine in Firefox 52.0.2, so what I report must be a bug in the legacy Firefox support code...
Please advise and many thanks for your unwaning efforts!
... Just to add to my previous report, if I downgrade from buggy uBlock0 1.12.5b2 to 1.12.5b1 (that functioned OK prior to updating), I only get back inside my "3rd party filters lists" only those lists that were previously selected in 1.12.5b1 and no other filter list to subscribe to:

EDIT: To get back my deselected filter lists, I had to reset a Firefox pref in about:config.
Since you explicitly state in this issue that the minimum (legacy) Firefox version that will be still supported henceforth is 24
That statement has been made according to the MDN documentation. If there is an issue existing with FF24 for Set()/Map()/for...of that is not documented in MDN, then I will just raise the minimal version.
There used to be an issue affecting Pale Moon regarding incompatible Set() iterator. If this issue affects FF24, then I will have to drop support for FF24.
Best would be for whoever still use FF24 to invest the time/effort to find out the cause of the issue.
If you do drop support for Firefox 24 please remember that Pale Moon 27 identifies to AMO as Firefox 27.9 and as such if you go above that for minAppVersion then Pale Moon users won't get updates from AMO.
This can be resolved however by getting your extension on the Pale Moon Add-ons Site proper instead of as an Indexed External.
See: http://developer.palemoon.org/Add-ons:Site
@Vangelis66 if you can look at the browser console, there is probably an error reported there. From reading the documentation, to keep being compatible with legacy iterators (if that is the issue) would be a simple matter of using for...of to iterate rather then manually doing it as I used to do with iter.next().
I have currently frozen my uBlock0 version to 1.12.5b1, which is the last that works on Fx 24.8.1; mind you, 1.12.5b1 was only briefly available on GitHub releases, but I have it safely saved locally on disk. As reported,
first broken build is the 1.12.5b2 one, currently available at AMO.
Sadly, I'm not a JS coder, so can't help in a more productive manner, as suggested:
Best would be for whoever still use FF24 to invest the time/effort to find out the cause of the issue.
I have once more installed 1.12.5b2 on top of 1.12.5b1, navigated to
chrome://ublock0/content/dashboard.html#3p-filters.html
and opened, as instructed, Browser Console; the entries relevant to uBlock are shown here:

TypeError references line 222 of file "3p-filters.js"
groups = groupsFromLists(details.available),
and there's also uncaught exception: [object StopIteration]
Hope I've helped...
EDIT: I've also discovered an additional breakage; the legacy toolbar button doesn't show
current version and is unresponsive, i.e. you can't disable uBlock0 on a tab by clicking it...

So this confirms the issue is with non-ES6 compliant iterators. As per documentation, converting the iteration code to use for...of should take care of the problem.
$ grep -Rn "\.done" src/
src/js/messaging.js:215: if ( entry.done ) {
src/js/cosmetic-filtering.js:1636: if ( entry.done ) {
src/js/utils.js:269: if ( entry.done ) { break; }
src/js/utils.js:287: if ( entry.done ) { break; }
src/js/static-net-filtering.js:1883: if ( entry.done === true ) { break; }
src/js/static-net-filtering.js:1896: if ( entry.done === true ) { break; }
src/js/static-net-filtering.js:1909: if ( entry.done === true ) { break; }
src/js/static-net-filtering.js:2351: if ( entry.done === true ) { break; }
src/js/static-net-filtering.js:2359: if ( entry.done === true ) { break; }
src/js/static-net-filtering.js:2372: if ( entry.done === true ) { break; }
src/js/static-net-filtering.js:2383: if ( entry.done === true ) { break; }
src/js/static-net-filtering.js:2395: if ( entry.done === true ) { break; }
src/js/redirect-engine.js:329: if ( item.done ) { break; }
src/js/traffic.js:55: if ( entry.done ) { break; }
src/js/url-net-filtering.js:151: if ( item.done ) { break; }
src/js/url-net-filtering.js:160: if ( item.done ) { break; }
src/js/url-net-filtering.js:317: if ( item.done ) { break; }
src/js/storage.js:340: if ( entry.done ) { break; }
@gorhill
I've just installed uBlock0 v1.12.5b4 available from the GitHub repo (releases page)
and so far things seem to be in working order :+1: Needless to say I'm indebted to you :1st_place_medal:
Keep up the sterling job!
Should Pale Moon minimum version be 27 now that polyfill is largely removed?
https://github.com/gorhill/uBlock/blob/master/platform/firefox/install.rdf#L50
I would say it is reasonable to bump the Pale Moon minVersion but do be aware of what I said before about AMO.
uBO 1.12.5.x is already not compatible with e.g. Chromium 35 but manifest.json still have the line:
"minimum_chrome_version": "26.0",
https://github.com/gorhill/uBlock/blob/master/platform/chromium/manifest.json
Most helpful comment
Yes, starting with next stable release (beyond 1.12.4).