2017-01-22 10:01 UTC

View Issue Details Jump to Notes ]
IDProjectCategoryView StatusLast Update
0000836OpenMPT[All Projects] Generalpublic2016-10-17 17:00
Reportermanx 
Assigned To 
PrioritynormalSeverityfeatureReproducibilityN/A
StatusnewResolutionopen 
Product VersionOpenMPT 1.26.03.* (old testing) 
Target VersionOpenMPT 1.27.01.00 (upcoming stable)Fixed in Version 
Summary0000836: Remove support for C++98 and C++03 compilers
DescriptionStill supporting these ancient compilers requires a huge amount of development time on work-arounds and re-implementing current, modern standard language features in sub-optimal fashion.

Support for obsolete and broken compilers should be removed as soon as possible.
This includes at the very least (this list is not up for discussion from my side, as removing fewer compiler will not gain us anything at all):

  • MSVC 2008, MSVC 2010, MSVC 2012

  • GCC 4.1, GCC 4.2, GCC 4.3, GCC 4.4, GCC 4.5, GCC 4.6

  • Clang 3.0, Clang 3.1


Requiring MSVC 2013, GCC 4.7, Clang 3.2 gives us usable C++11 support.
This will bump the minimum required Operating System versions for some common ones to:

  • Windows XP (removing Windows 98 SE + KernelEx, Windows ME + KernelEx, Windows 2000

  • Debian 7 (removing Debian 4, Debian 5, Debian 6)

  • Ubuntu 14.04 (removing Ubuntu 8.04, Ubuntu 10.04, Ubuntu 12.04)

  • FreeBSD 10 (removing FreeBSD 7, FreeBSD 8, FreeBSD 9)

  • CentOS 7 (removing CentOS 5, CentOS 6)


Note that all of these common OSs have already stable Long Term Support releases (which we would continue to support) out since more than 2 years now. For Windows, Long Term Support for Windows 2000 even expired more than 5 years ago by now.
Additional InformationUsable C++14 support would probably (at least) require additionally removing support for the following compilers:

  • MSVC 2013

  • GCC 4.7, GCC 4.8, GCC 4.9

  • Clang 3.2, Clang 3.3


This is currently not feasible at all, because it would mean removing support for the current LTS release of various Operating System.
TagsNo tags attached.
Has the bug occurred in previous versions?
Tested code revision (in case you know it)
Attached Files

-Relationships
parent of 0000846resolvedmanx Enable C++11 support on Android 
related to 0000821resolvedmanx Document how libopenmpt can be used in multi-threaded environment 
+Relationships

-Notes
manx

~0002529

manx (administrator)

We may want to take this to the forum and/or add telemetry data on used Operating System to the update mechanism of OpenMPT.
Saga Musix

~0002530

Saga Musix (administrator)

Since r6705, there is telemetry for Windows/Wine versions in the update checker.
harbinger

~0002539

harbinger (reporter)

I don't know about this. I came to ModPlug thru Windows 98 (actually an emulator of it on Mac), and I'd still be using it if I didn't have other applications that motivated me to get a Windows computer. I'm still on XP, but computers are often handed down that use obsolete platforms, and I'd hate to lose a potential user/member/colleague because our software is one version beyond their reach.
I have no intention of moving "up" from Windows XP, so when am I gonna get muscled out? (rhetorical question to make a point)

Now if you're doing an overhaul of the GUI and you need to do a serious update to the features, for which we simply didn't have the tech way back when ModPlug was open-sourced, that's different. Otherwise if you're only doing it for convenience's sake, maybe you can brainstorm a workaround, so that older computers are not once again denied a great old-school application.

Yes, perhaps a thread in the forums will bring us to a nice compromise or win-win answer....
Saga Musix

~0002540

Saga Musix (administrator)

I don't know about this. I came to ModPlug thru Windows 98 (actually an emulator of it on Mac), and I'd still be using it if I didn't have other applications that motivated me to get a Windows computer.

This is 2016, not 2006. Most major software that people use no longer runs on Windows 98 or Windows 2000, making OpenMPT a very rare exception. You can always use an old version of OpenMPT on Windows 98 if you really must. Besides, what about the theortical Windows 95 users out there which also cannot use OpenMPT anymore since... more than 10 years ago?

Otherwise if you're only doing it for convenience's sake, maybe you can brainstorm a workaround, so that older computers are not once again denied a great old-school application.

The "convenience" we are talking about here directly correlates with motivation to work on the code at all. If the code is complicated to write (which it is when having to target C++98), it's also not fun to write. The "workaround" you are talking about is not upgrading to C++11, making writing new, maintainable code more complicated than necessary.
Saga Musix

~0002541

Saga Musix (administrator)

(besides, it is very well possible that Win98SE and WinME may still be supported through KernelEx - only dropping Win2k support in the end. That entirely depends on which APIs are available in KernelEx and which are not. manx' list is just a worst-case assumption in this regard.)
manx

~0002542

manx (administrator)

As far as I know, there is no way whatsoever to make a Win 9x kernel load MSVC 2010 (or later) binaries at all. I think I did try that in the past. After all, as far as I know, this was the one and only reason to still support MSVC 2008 at all.
Thus, Win98SE and WinME support will die.
manx

~0002543

manx (administrator)

I have no intention of moving "up" from Windows XP, so when am I gonna get muscled out?

I think it is generally (as a goal to strive for) wise to support at least two versions (i.e. the latest two) of Visual Studio. Thus, as long as the second to latest Visual Studio release still supports Windows XP, it probably will not go away (for Win32old build variants). Full functionality already currently requires Windows 7 / 8.1 (mostly because of compressed lossy sample import).
Visual Studio 2015 still supports XP, thus Windows XP support is here to stay at least for the next 2 years, I guess. I cannot predict the future of course, and there may be or come around other reasons to remove Windows XP at some point.
Currently, however, I do not think there is much to gain from removing Windows XP support. Not so much because of Windows XP itself, but because of Wine, which in most aspects implements functionality roughly equivalent to Windows XP API level.
manx

~0002586

manx (administrator)

I again just lost about 2 hours fighting broken compilers.
manx

~0002601

manx (administrator)

Removing support for MSVC 2008, MSVC 2010, MSVC 2012 will remove support for the following CPUs in OpenMPT and libopenmpt builds:
- Cyrix 6x86L
- Rise mP6
- IDT Winchip C6
- IDT Winchip 2
manx

~0002602

manx (administrator)

vs2015xp builds crash on Wine 1.0.1
manx

~0002622

manx (administrator)

vs2015xp builds work on Wine 1.4.1
manx

~0002623

manx (administrator)

I think it would be worth the effort to still support GCC 4.6 in some kind of ANCIENT configuration (like we are currently doing for MSVC 2008, GCC 4.1, GCC 4.2, GCC 4.3) because Debian 7 still uses GCC 4.6 on non-x86 systems.
Our only real hardware big-endian system is on Debian 6 and cannot be upgraded. Installing Debian 7 compilers there might be feasible though.
manx

~0002626

manx (administrator)

Forum post is at https://forum.openmpt.org/index.php?topic=5708.0 .
manx

~0002632

manx (administrator)

Support for VS2008, GCC 4.1, GCC 4.2, GCC 4.3 is gone now (r7005, r7006, r7007, r7009).
manx

~0002650

manx (administrator)

GCC 4.7 has severe problems with moderate use of constexpr, thus, to get really usable C++11 support, GCC 4.7 support would also have to be removed.
manx

~0002684

manx (administrator)

So far, we have only dropped 4 compilers:
 - MSVC 2008
 - GCC 4.1
 - GCC 4.2
 - GCC 4.3
manx

~0002697

manx (administrator)

Last edited: 2016-10-15 09:24

View 2 revisions

Various C++ features would require support for various different compilers to be removed:


random:
gcc 4.4

nullptr:
gcc 4.4
gcc 4.5

chrono:
vs 2010

enum class:
vs 2010

inttypes:
vs 2010
vs 2012

variadic templates:
vs 2010
vs 2012

default/delete:
vs 2010
vs 2012

template aliases:
gcc 4.4
gcc 4.5
gcc 4.6
vs 2010
vs 2012

noexcept:
gcc 4.4
gcc 4.5
vs 2010
vs 2012
vs 2013

constexpr (c++11):
gcc 4.4
gcc 4.5
gcc 4.6
gcc 4.7
clang 3.0
vs 2010
vs 2012
vs 2013


atomic:
clang 3.0
vs 2010

mutex:
clang 3.0
clang 3.1
vs 2010

thread:
clang 3.0
clang 3.1
clang 3.2
clang 3.3
clang 3.4
clang 3.5
vs 2010

manx

~0002699

manx (administrator)

...

type_traits working for array types:
vs 2010
vs 2012
vs 2013

type_traits is_trivially_copyable:
gcc 4.4
gcc 4.5
gcc 4.6
gcc 4.7
gcc 4.8
gcc 4.9
gcc 5.0
clang 3.0
clang 3.1
clang 3.2
clang 3.3
clang 3.4
vs 2010
+Notes

-Issue History
Date Modified Username Field Change
2016-07-30 09:32 manx New Issue
2016-07-30 09:35 manx Note Added: 0002529
2016-07-30 16:37 Saga Musix Note Added: 0002530
2016-08-04 15:20 harbinger Note Added: 0002539
2016-08-04 15:26 Saga Musix Note Added: 0002540
2016-08-04 15:31 Saga Musix Note Added: 0002541
2016-08-04 16:32 manx Note Added: 0002542
2016-08-04 19:40 manx Note Added: 0002543
2016-08-05 09:30 manx Relationship added parent of 0000846
2016-08-09 09:32 manx Note Added: 0002586
2016-08-14 17:00 manx Note Added: 0002601
2016-08-14 19:32 manx Note Added: 0002602
2016-08-20 10:01 manx Relationship added related to 0000821
2016-08-21 12:55 manx Note Added: 0002622
2016-08-21 13:10 manx Note Added: 0002623
2016-08-24 07:26 manx Note Added: 0002626
2016-08-26 06:54 manx Target Version => OpenMPT 1.27.01.00 (upcoming stable)
2016-09-02 16:08 manx Note Added: 0002632
2016-09-03 11:13 manx Additional Information Updated View Revisions
2016-09-08 16:15 manx Note Added: 0002650
2016-10-02 08:39 manx Note Added: 0002684
2016-10-15 09:24 manx Note Added: 0002697
2016-10-15 09:24 manx Note Edited: 0002697 View Revisions
2016-10-17 17:00 manx Note Added: 0002699
+Issue History