UNIX / Linux keyboard.

I installed the Adobe Flash plugin
but Firefox can't play videos!

A Historical Problem

Adobe Flash was finally killed off at midnight GMT on January 12, 2021. HTML 5 has been the way to go for years. YouTube had used Flash until 2015.

The railroad network in Dalian, China, ran on Flash, and so their railroad suddenly stopped operating. Their solution was to install a pirated version of a Flash server, apparently called "Ghost Version", and then an older version of a Flash player. Several outlets had stories, the best I've seen is the HotHardware one, while the one from VerietyInfo.com seems to have more inside information:
HotHardware VerietyInfo InsideHook Jalopnik

Summary of the problem:

You installed the Adobe Flash plugin, maybe as part of your Linux distribution or maybe as an addition from the Adobe web site.

The plugin is installed, Firefox knows about it, but YouTube and other videos won't play.

What's wrong?

Adobe has compiled Flash so it won't run on your CPU.

YouTube page showing the Fatboy Slim 'Weapon of Choice' music video.

A YouTube page viewed with Firefox on a KDE desktop under Linux.

SSE, SSE2, and later

Intel developed what they called Streaming SIMD Extension and added it to their Pentium III series of processors in 1999. It added 70 new machine instructions which came to be used largely for digital signal processing and graphics processing. Intel has since continued with SSE2, SSE3, SSSE3, and SSE4, as it has gone through advancing generations of processors.

The compilers have followed these developments, with options to optimize the resulting binaries for one or another, making the binary faster on newer hardware but incompatible with older hardware.

That's what we have run into here...

Feature Year
SSE 1999
SSE2 2001
SSE3 2004
SSSE3 2006
SSE4 2006

You must have a really old processor if it doesn't support SSE2. Intel's Pentium 4 included SSE2 in 2001. AMD added support for SSE2 in 2003 in their Opteron and Athlon 64 AMD64 64-bit CPUs. If you upgrade your system, you will get much better performance all around — a much faster CPU probably with multiple cores, more and faster memory, and much faster disk I/O.

The details are here, but memory speed doubles with each generation of DDR, DDR2, DDR3, DDR4. For disks, SATA 3.0/3.1 is 4.5 times as fast as UDMA 133. General-purpose PATA disks haven't been manufactured since 2013. Solid-state disks are becoming more economical, with about 50 times faster seek time for random disk I/O.

Adobe's Flash, the Chrome browser, Windows 8, and Microsoft Office 2013 will not run on older SSE processors

Starting with version 11.2, Adobe started compiling the Flash software so it will run only on SSE2 or later hardware.

Google Chrome version 33 was the last version that would run on non-SSE2 hardware.

Windows 8 and Microsoft Office 2013 refuse to install themselves onto non-SSE2 platforms.

The following CPUs are IA-32 architecture that do not include SSE2 and therefore do not support Flash, Chrome, Windows 8, or Microsoft Office 2013:
• AMD processors before Athlon 64 (including all Socket A CPUs)
• Intel CPUs before Pentium 4
• Transmeta Crusoe
• VIA C3

Which SSE version does my processor support?

It is simple to answer this question:

$ grep flags /proc/cpuinfo

On a really old system with an Athlon (CPU family 6, model 10) I see the following:

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnow

So, Flash downloaded from Adobe will not run on that platform. Nor would Windows 8 or Office 2013.

On a less old system with an AMD Phenom II X4 965 processor (CPU family 16, model 4) I see the following:

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc extd_apicid pni monito r cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3d nowprefetch osvw ibs skinit wdt hw_pstate npt lbrv svm_lock nrip_save

On an Intel Core i5-2400 system I see:

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d

Is there a fix? Yes!

How to run Flash on older SSE processors

Install the version 11.2 Flash plugin included in Google Chrome 19 for Linux.

Newer versions of Chrome use a different plugin, but Chrome 19 has a shared library that can be installed as a Firefox plugin.

Here's how to do it:

1: Uninstall the Adobe-sourced Flash plugin.

2: Remove any remaining copy of:
/usr/lib/mozilla/plugins/libflashplayer.so

3: Just to be safe, see if any other copies are lying around:
find / -name 'libflashplayer*'

4: Download the Chrome 19 shared library file from http://www1.datafilehost.com/d/796ff3f2

5: That download should worry you as it looks at least mysterious if not downright questionable. Verify that you got the trustworthy software by checking its cryptographic hash.

A cryptographic hash function returns a very distinctive "fingerprint" of a file. If you have two files, and both lead to the same hash output, you can be very confident that they have identical contents.

Not absolutely certain, as it is possible that there was a hash collision, the event when different inputs lead to identical hash outputs. The number of possible hash outputs is enormous but still finite, where there are infinitely many possible inputs. So, hash collisions must exist! However, for the hash functions we use today, we don't know of any practical ways of finding collisions.

If you are using non-SSE2 hardware, you very likely are also using an version of the OpenSSL package. Recent versions of the openssl command can calculate SHA-2-256 and SHA-2-512 hashes, but you might have to use the shash command.

Here are the SHA-2-256 and SHA-2-512 outputs for the shared library file I have used without encountering problems, as calculated by both programs:

$ openssl sha256 libgcflashplayer.so
SHA256(libgcflashplayer.so)= b83420ed86fd7ac1fe6a5723bd68a82353a084d08ccfa6ea457ef0b714c09ff0

$ shash -a SHA256 libgcflashplayer.so
# SHA256 HASH
b83420ed86fd7ac1fe6a5723bd68a82353a084d08ccfa6ea457ef0b714c09ff0  libgcflashplayer.so

$ openssl sha512 libgcflashplayer.so
SHA512(libgcflashplayer.so)= a35a95cca415ea0df6a225ea83a3f0aecfa1b19622a5c5386c6c3548efa78370de1afe400a1929458d80bf72b41f4db55291ef7f8bf3abc7d3798642d0b9aafc

$ shash -a SHA512 libgcflashplayer.so
# SHA512 HASH
a35a95cca415ea0df6a225ea83a3f0aecfa1b19622a5c5386c6c3548efa78370de1afe400a1929458d80bf72b41f4db55291ef7f8bf3abc7d3798642d0b9aafc  libgcflashplayer.so

6: Now that you're certain that you have the correct file, rename and move the downloaded file:

$ mv libgcflashplayer.so libflashplayer.so
$ su
password:
# mv libflashplayer.so /usr/lib/mozilla/plugins

That gives you an SSE-capable Flash Player version 11.2.202.235. Moving forward, Adobe has dropped Flash development for Linux. Use Chrome if you need Flash support, through its "Pepper" plugin. ahead, video support within HTML5 is making Flash a thing of the past.

Back to the Linux page