
Voice.ai: GPL Violations with a Side of DRM by ronsor
Since the release of Eleven Labs’s Prime Voice AI platform, AI-based voice synthesis and modification
has seen a revival in popularity. Browsing online forums, I stumbled upon Voice.AI,
which bills itself as a “Real-Time AI Voice Changer” software program and community platform. Since the
program seemed to run offline (more on that later), I was more interested in it than Eleven Labs’s
offering. I figured it would be possible to pipe the output of a regular TTS like espeak into Voice.ai in
order to obtain better results.
As a curious software developer and privacy-conscious person, after installing version 0.1.25.0 (I later
updated to 0.1.25.1, which is the latest version as of my writing this post on February 4, 2023), I
naturally dug into the program files to see exactly what was installed and how it worked.
GPL Violation Saga
After running strings
on the files in the Program FilesVoice.ai
directory, I discovered some of
the third-party components they were using: Praat and libgcrypt. These were statically linked into the VoiceAILib.dll
library.
Truncated output from strings
% strings VoiceAILib.dll | grep -iE '^C:'
C:UsersDDesktopPraatLib_CMakePraatLib_CMakeexternalgslgsl_specfunc__bessel_In.c
C:UsersDDesktopPraatLib_CMakePraatLib_CMakeexternalgslgsl_specfunc__bessel_Kn.c
C:UsersDDesktopPraatLib_CMakePraatLib_CMakeexternalgslgsl_specfunc__gamma.c
C:UsersDDesktopPraatLib_CMakePraatLib_CMakeexternalgslgsl_specfunc__gamma_inc.c
C:UsersDDesktopPraatLib_CMakePraatLib_CMakeexternalgslgsl_specfunc__beta_inc.c
C:UsersDDesktopPraatLib_CMakePraatLib_CMakeexternalgslgsl_specfunc__beta.c
...
C:UsersDDownloadslibgcrypt-libgcrypt-1.10.1ciphercipher.c
C:UsersDDownloadslibgcrypt-libgcrypt-1.10.1ciphermd.c
C:UsersDDownloadslibgcrypt-libgcrypt-1.10.1ciphermac.c
C:UsersDDownloadslibgcrypt-libgcrypt-1.10.1cipherprimegen.c
...
This is concerning, since Praat is licensed under the GPLv3
and libgcrypt is licensed under the LGPLv2.1. These licenses
are not included with the software at all; in fact, Voice.ai’s Terms of Service1
has sections which explicitly violate these licenses:
We retain all right, title and ownership to the Beta product. You agree the Beta Product is for personal use only.
You may not sell, transfer, assign, pledge or in any way encumber or convey the Beta product or any portion or component
thereof to any third party or use it in any manner to produce, market or support your own products. You shall not copy,
sell or market Beta product to any third party; or modify, reuse, disassemble, decompile, reverse engineer or otherwise
translate the beta product or any portion thereof
Meanwhile, the GPLv3 states plainly:
When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the
extent such circumvention is effected by exercising rights under this License with respect to the covered work, and
you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work’s
users, your or third parties’ legal rights to forbid circumvention of technological measures.
In order to confirm that these strings were in fact evidence of copied GPL code, I fired up the Ghidra reverse
engineering tool and searched for references to these strings. After decompiling VoiceAILib.dll, I found many
functions that matched code from the Praat GitHub repository.