This is going to be too long for a comment..
It's not a bug. It's documented here: 
As of MySQL 5.7.6, the optimizer handles propagation of an ORDER BY
  clause in a derived table or view reference to the outer query block
  by propagating the ORDER BY clause if the following conditions apply:
  The outer query is not grouped or aggregated; does not specify
  DISTINCT, HAVING, or ORDER BY; and has this derived table or view
  reference as the only source in the FROM clause. Otherwise, the
  optimizer ignores the ORDER BY clause. Before MySQL 5.7.6, the
  optimizer always propagated ORDER BY, even if it was irrelevant or
  resulted in an invalid query.
However it's not the case for your query. So i guess your second server is running MariaDB which seams to ingnore any ORDER BY in a subquery without LIMIT
A "table" (and subquery in the FROM clause too) is - according to the
  SQL standard - an unordered set of rows. Rows in a table (or in a
  subquery in the FROM clause) do not come in any specific order. That's
  why the optimizer can ignore the ORDER BY clause that you have
  specified. In fact, SQL standard does not even allow the ORDER BY
  clause to appear in this subquery (we allow it, because ORDER BY ...
  LIMIT ... changes the result, the set of rows, not only their order).
You need to treat the subquery in the FROM clause, as a set of rows in
  some unspecified and undefined order, and put the ORDER BY on the
  top-level SELECT.
Why is ORDER BY in a FROM Subquery Ignored?
So best you can do is just to move the ORDER BY clause to the outer query. Or don't use a subquery at all.