Alright, so, a follow-up/response to ZWO's press release. Let's start with their factual assertion:

To which I say, 'Do you bite your thumb at me, sir?'

And so I downloaded every version of the ASIAir apk/xapk I could find, and a few others for completeness/hilarity.

billn@Hadriel:~/Downloads/ASIAIR$ ls *apk
 ASIAIR_1.0.4_Apkpure.apk    ASIAIR_1.3_Apkpure.apk      ASIAIR_1.4.3_Apkpure.xapk   ASIAIR_1.6.2_Apkpure.xapk
 ASIAIR_1.0.5_Apkpure.apk    ASIAIR_1.4.1_Apkpure.apk    ASIAIR_1.4.4_Apkpure.apk    ASIAIR_1.6_Apkpure.xapk     ASIAIR_1.9_Apkpure.apk
 ASIAIR_1.0.8_Apkpure.apk    ASIAIR_1.4.1_Apkpure.xapk   ASIAIR_1.4.4_Apkpure.xapk   ASIAIR_1.7_Apkpure.xapk    'ASICAP_2.0.7_(1260_0804).apk'
 ASIAIR_1.0.9_Apkpure.apk    ASIAIR_1.4.2_Apkpure.apk    ASIAIR_1.4_Apkpure.apk      ASIAIR_1.8.1_Apkpure.xapk
 ASIAIR_1.0.9_Apkpure.xapk   ASIAIR_1.4.2_Apkpure.xapk   ASIAIR_1.5.3_Apkpure.xapk   ASIAIR_1.8.3_Apkpure.xapk
 ASIAIR_1.1_Apkpure.apk      ASIAIR_1.4.3_Apkpure.apk    ASIAIR_1.6.1_Apkpure.xapk   ASIAIR_1.8_Apkpure.xapk

For anyone that wants to duplicate my findings, the basic disassembly process is below. The first two commands, I didn't include output, for brevity. We're focused on the indi-y package here for context, but we'll talk about some other bits later. Sorry for how lengthy this is, but I'm trying to be complete/transparent here.
billn@Hadriel:~/Downloads/ASIAIR/ASIAIR_1.7_Apkpure.xapk.d$ unzip ../ASIAIR_1.7_Apkpure.xapk
billn@Hadriel:~/Downloads/ASIAIR/ASIAIR_1.7_Apkpure.xapk.d$ unzip com.zwoasi.asiair.apk
billn@Hadriel:~/Downloads/ASIAIR/ASIAIR_1.7_Apkpure.xapk.d$ cd assets
billn@Hadriel:~/Downloads/ASIAIR/ASIAIR_1.7_Apkpure.xapk.d/assets$ bunzip2 air_pi4
bunzip2: Can't guess original name for air_pi4 -- using air_pi4.out
billn@Hadriel:~/Downloads/ASIAIR/ASIAIR_1.7_Apkpure.xapk.d/assets$ tar -xvf air_pi4.out
billn@Hadriel:~/Downloads/ASIAIR/ASIAIR_1.7_Apkpure.xapk.d/assets$ cd deb
billn@Hadriel:~/Downloads/ASIAIR/ASIAIR_1.7_Apkpure.xapk.d/assets/deb$ ar x indi-y_armhf.deb
billn@Hadriel:~/Downloads/ASIAIR/ASIAIR_1.7_Apkpure.xapk.d/assets/deb$ unxz data.tar.xz
tabilln@Hadriel:~/Downloads/ASIAIR/ASIAIR_1.7_Apkpure.xapk.d/assets/deb$ tar -xvf data.tar

Rinse and repeat for each of the APK/XAPK in my collection. There's minor variance for early versions, which were for the Raspberry Pi3 of the original model, so instead the update package being asiair_pi4 or asiair_pi3, it was just 'air'.
The structure changed a little at 1.8, with the introduction of the patch packages:
billn@Hadriel:~/Downloads/ASIAIR/ASIAIR_1.8.3_Apkpure.xapk.d/Android/obb/com.zwoasi.asiair$ cd patch/
billn@Hadriel:~/Downloads/ASIAIR/ASIAIR_1.8.3_Apkpure.xapk.d/Android/obb/com.zwoasi.asiair/patch$ ls
air_pi3  air_pi4  web

Now, as I've mentioned in previous posts, ZWO ships a 1.7.8 version indiserver. From the 1.9 control for their indi-y package:
billn@Hadriel:~/Downloads/ASIAIR/$ more control
Package: libindi1-y
Priority: extra
Section: checkinstall
Installed-Size: 17268
Maintainer: root@raspberrypi
Architecture: armhf
Version: 1.7.8-21
Provides: libindi
Description: Instrument-Neutral Device Interface library -- shared library
Replaces: libindi-plugins, libindi0, libindialignmentdriver1, libindidriver1, indi-bin, libindi-data, libindi1
Conflicts: libindi-plugins, libindi0, libindialignmentdriver1, libindidriver1, indi-bin, libindi-data, libindi1
Depends: libc6,libgsl23,libgslcblas0,libstdc++6,libgcc1,libusb-1.0-0,libnova-0.16-0,libcfitsio7,zlib1g,libjpeg62-turbo,libudev1,libcurl3-gnutls,libbz2-1.0,li

ZWO's published repo contains all of 2 commits, none of which show code changes. Looking at just the indiserver binary across all versions, we can see their basic statement of strictly following source release requirements is.. specious:
billn@Hadriel:~/Downloads/ASIAIR$ find . -name indiserver | xargs md5sum
b80e8bb9e37d95a837805d139c471067  ./ASIAIR_1.0.8_Apkpure.apk.d/assets/root/usr/bin/indiserver
aab8e0017588770a4958c04f0ba24c51  ./ASIAIR_1.0.9_Apkpure.apk.d/assets/deb/usr/bin/indiserver
7b4b732840ab35f2c75569b75a60d65f  ./ASIAIR_1.3_Apkpure.apk.d/assets/deb/usr/bin/indiserver
af71777c5914e64015151f7daf66e453  ./ASIAIR_1.4.1_Apkpure.apk.d/assets/deb/usr/bin/indiserver
af71777c5914e64015151f7daf66e453  ./ASIAIR_1.4.2_Apkpure.apk.d/assets/deb/usr/bin/indiserver
af71777c5914e64015151f7daf66e453  ./ASIAIR_1.4.3_Apkpure.apk.d/assets/deb/usr/bin/indiserver
876213b75dea10455398ee3ac62e5bc4  ./ASIAIR_1.4.4_Apkpure.apk.d/assets/deb/usr/bin/indiserver
f9395ea7665dafefc96b22d9d831b14f  ./ASIAIR_1.4_Apkpure.apk.d/assets/deb/usr/bin/indiserver
7ee6f24a65e0a0fea7a4f8fe8dc0f9e0  ./ASIAIR_1.5.3_Apkpure.xapk.d/assets/deb/usr/bin/indiserver
7ee6f24a65e0a0fea7a4f8fe8dc0f9e0  ./ASIAIR_1.6.1_Apkpure.xapk.d/assets/deb/usr/bin/indiserver
7ee6f24a65e0a0fea7a4f8fe8dc0f9e0  ./ASIAIR_1.7_Apkpure.xapk.d/assets/deb/usr/bin/indiserver
7ee6f24a65e0a0fea7a4f8fe8dc0f9e0  ./ASIAIR_1.8.3_Apkpure.xapk.d/Android/obb/com.zwoasi.asiair/patch/deb/usr/bin/indiserver
7ee6f24a65e0a0fea7a4f8fe8dc0f9e0  ./ASIAIR_1.8_Apkpure.xapk.d/assets/deb/usr/bin/indiserver
7ee6f24a65e0a0fea7a4f8fe8dc0f9e0  ./

billn@Hadriel:~/Downloads/ASIAIR$ find . -name indiserver | xargs ls -al
-rwxrwxrwx 1 billn billn  53428 Dec  5  2018 ./ASIAIR_1.0.8_Apkpure.apk.d/assets/root/usr/bin/indiserver
-rwxrwxrwx 1 billn billn  53428 Mar  3  2019 ./ASIAIR_1.0.9_Apkpure.apk.d/assets/deb/usr/bin/indiserver
-rwxrwxrwx 1 billn billn  53428 Jun 20  2019 ./ASIAIR_1.3_Apkpure.apk.d/assets/deb/usr/bin/indiserver
-rwxrwxrwx 1 billn billn 167772 Feb  3  2020 ./ASIAIR_1.4.1_Apkpure.apk.d/assets/deb/usr/bin/indiserver
-rwxrwxrwx 1 billn billn 167772 Mar 11  2020 ./ASIAIR_1.4.2_Apkpure.apk.d/assets/deb/usr/bin/indiserver
-rwxrwxrwx 1 billn billn 167772 Mar 11  2020 ./ASIAIR_1.4.3_Apkpure.apk.d/assets/deb/usr/bin/indiserver
-rwxrwxrwx 1 billn billn 167820 Apr 15  2020 ./ASIAIR_1.4.4_Apkpure.apk.d/assets/deb/usr/bin/indiserver
-rwxrwxrwx 1 billn billn 167864 Jan  8  2020 ./ASIAIR_1.4_Apkpure.apk.d/assets/deb/usr/bin/indiserver
-rwxrwxrwx 1 billn billn 167868 Jan 14  2021 ./ASIAIR_1.5.3_Apkpure.xapk.d/assets/deb/usr/bin/indiserver
-rwxrwxrwx 1 billn billn 167868 May 16  2021 ./ASIAIR_1.6.1_Apkpure.xapk.d/assets/deb/usr/bin/indiserver
-rwxrwxrwx 1 billn billn 167868 May 16  2021 ./ASIAIR_1.7_Apkpure.xapk.d/assets/deb/usr/bin/indiserver
-rwxrwxrwx 1 billn billn 167868 May 16  2021 ./ASIAIR_1.8.3_Apkpure.xapk.d/Android/obb/com.zwoasi.asiair/patch/deb/usr/bin/indiserver
-rwxrwxrwx 1 billn billn 167868 May 16  2021 ./ASIAIR_1.8_Apkpure.xapk.d/assets/deb/usr/bin/indiserver
-rwxrwxrwx 1 billn billn 167868 Oct 21  2021 ./

So let's go look at their repo at, which they mention in their press release. I downloaded a master/trunk 1.7.8 tarball, and unpacked it over a clone of ZWO's git tree, expecting to run 'git diff' to see differences.
I encourage you to duplicate it for yourself, to really appreciate what comes next. If you're familiar with indi's development history, the eagle eyed among you will notice something in ZWO's tree that isn't in the master/trunk for 1.7.8.
billn@Hadriel:~/indi$ ls
indi-1.7.8  indilib  v1.7.8.tar.gz
billn@Hadriel:~/indi$ find . -name fcusb*

ZWO's statement that they strictly follow the licensing requirements for open source libraries used in their products, in my opinion, is categorically false. Just on binary details alone, we can see seven unique indiserver binaries, which means at a minimum, we should see 7 release tags in their github repo.
Whatever this tree they published is, it's.. wrong. There are things in this tree that aren't part of 1.7.8, so I'd hazard a guess that they'd been cherry picking updates over time and merging the changes themselves. For the indi-y package itself, we can see size changes over time that indicate other changes,
likely drivers and other libs.
billn@Hadriel:~/Downloads/ASIAIR$ find . -name indi-y* | xargs ls -al
-rwxrwxrwx 1 billn billn 1277954 Mar 21  2019 ./ASIAIR_1.0.9_Apkpure.apk.d/assets/deb/indi-y_armhf.deb
-rwxrwxrwx 1 billn billn 1278576 Apr 23  2019 ./ASIAIR_1.1_Apkpure.apk.d/assets/deb/indi-y_armhf.deb
-rwxrwxrwx 1 billn billn 1336098 Sep 10  2019 ./ASIAIR_1.3_Apkpure.apk.d/assets/deb/indi-y_armhf.deb
-rwxrwxrwx 1 billn billn 8931216 Feb  3  2020 ./ASIAIR_1.4.1_Apkpure.apk.d/assets/deb/indi-y_armhf.deb
-rwxrwxrwx 1 billn billn 8932744 Mar 11  2020 ./ASIAIR_1.4.2_Apkpure.apk.d/assets/deb/indi-y_armhf.deb
-rwxrwxrwx 1 billn billn 8932744 Mar 11  2020 ./ASIAIR_1.4.3_Apkpure.apk.d/assets/deb/indi-y_armhf.deb
-rwxrwxrwx 1 billn billn 8934832 Jun 15  2020 ./ASIAIR_1.4.4_Apkpure.apk.d/assets/deb/indi-y_armhf.deb
-rwxrwxrwx 1 billn billn 9396856 Jan  8  2020 ./ASIAIR_1.4_Apkpure.apk.d/assets/deb/indi-y_armhf.deb
-rwxrwxrwx 1 billn billn 8946908 Jan 14  2021 ./ASIAIR_1.5.3_Apkpure.xapk.d/assets/deb/indi-y_armhf.deb
-rwxrwxrwx 1 billn billn 8946724 May 17  2021 ./ASIAIR_1.6.1_Apkpure.xapk.d/assets/deb/indi-y_armhf.deb
-rwxrwxrwx 1 billn billn 8946724 May 17  2021 ./ASIAIR_1.7_Apkpure.xapk.d/assets/deb/indi-y_armhf.deb
-rwxrwxrwx 1 billn billn 8946724 May 17  2021 ./ASIAIR_1.8.3_Apkpure.xapk.d/Android/obb/com.zwoasi.asiair/patch/deb/indi-y_armhf.deb
-rwxrwxrwx 1 billn billn 8946724 May 17  2021 ./ASIAIR_1.8_Apkpure.xapk.d/assets/deb/indi-y_armhf.deb
-rwxrwxrwx 1 billn billn 8974304 Jun 16  2022 ./

But wait, there's more!
billn@Hadriel:~/Downloads/ASIAIR$ find . -name *ffmp*

You eagle-eyed folk will notice that the file paths in this output aren't just for the ASIair gadget, but also include the tablet app. libijkffmpeg is an ffmpeg derived fork.

"FFmpeg is licensed under the GNU Lesser General Public License (LGPL) version 2.1 or later. However, FFmpeg incorporates several optional parts and optimizations that are covered by the GNU General Public License (GPL) version 2 or later. If those parts get used the GPL applies to all of FFmpeg.."

But wait..

billn@Hadriel:~/Downloads/ASIAIR/$ ls -al
total 28
drwxrwxrwx 1 billn billn 512 Jul 1 2022 .
drwxrwxrwx 1 billn billn 512 Jul 1 2022 ..
drwxrwxrwx 1 billn billn 512 Jul 1 2022 font
-rwxrwxrwx 1 billn billn 26030 Jul 20 2021 planets.ini
drwxrwxrwx 1 billn billn 512 Jul 1 2022 shaders
drwxrwxrwx 1 billn billn 512 Jul 1 2022 skydata
drwxrwxrwx 1 billn billn 512 Jul 1 2022 symbols
-rwxrwxrwx 1 billn billn 286 Jul 1 2021 symbols.png
drwxrwxrwx 1 billn billn 512 Jul 1 2022 textures
-rwxrwxrwx 1 billn billn 12 May 6 2022 ver.txt

That's Stellarium Web Engine, which is Affero GPL3 licensed:
I emailed the Stellarium gang about it, they had no idea ZWO was using it, which means they didn't have a licensing agreement outside of the GPL.

To leave it all to artistry, open up your ASIair application, find the 'Credits' page where they list the open source libraries, with links to show relevant licenses and homepage/source repos.
Pay close attention to which link expands when you click on libindi and Stellarium. The expansion incorrectly shows the libgphoto license.

As an exercise to the reader, I invite you to crack open the APK for the AM3/AM5 mounts. They also contain Stellarium Web Engine. Sitting in ZWO's presentation at NEAF about their new little scope, the Seestar, I leaned over and asked their lead developer, Larry Ji, if the Seestar uses the same SkyMap as the ASIAir and Am5. His response was an emphatic 'Yes', likely because he had no idea who I was.

In summary:
The ASIair gadget is GPL tainted (with the exception of the guider), but there is no public repo for the imager binary.
The ASIair's plate solver comes from (GPL), for which they've published a source tree, after being served notice of non-compliance.
The ASIair's star removal tool comes from the Siril kit (GPL), but there is no public repo available.
The libindi repo is missing several revisions worth of commit history.
The ASIAir, ASICap, ASIMount applications are AGPL3.0 tainted, but no public repos are available.

'Strict', they say. 'Rumors', 'allegations', they say.

Bullshit, I say.


I learned some new things while I was at NEAF that need some research, that I'll likely get into tonight. I don't have any updates as to actions taken by other lib owners, yet. I'll share any details as soon as I get any. Overall, I'm working up a rebuttal of sorts to ZWO's press release, with supporting data.


root@asiair:/usr/bin# strings zwo_deleteStarsTool | grep Siril
FITS image format %d is not supported by Siril.

I’m traveling right now, that’s just a c/p from an earlier post. I believe that’s a binary build of a star removal tool from the Siril kit. I can grab you the binary if you’d like to look at it yourself.


Thanks for sharing that, my grasp of French remains fleeting, but Google translate got me through it well enough. A number of people have reached out to me privately with ZWO's dirty laundry, and I'm at a crossroads as what to do next. I've done enough to thoroughly expose the problem, ZWO themselves did a better job of shining light on the problem than I did, frankly. The two basic responses were mostly a mix of "Doesn't matter, my stuff works" and "Hey, that's bad." One dude called me a Karen.

So now it's just waiting to see what happens next. They've got 9 days, at the time of this writing, before the 30 day clock runs out on one lib author's notice to get correct or he'd revoke their license. They published some source but not everything, by a long shot, so it'll be up to his opinion on their effort as to what happens after that. I never set out to be ZWO's nemesis here, I just them to honor their obligations and maybe, you know, actually give something back to the community instead of slowly poisoning the well with what I feel are anti-competitive tactics, leveraging code they don't have distribution rights to. As one of the folks in that forum pointed out, my options to compel them are limited, the people with power here are lib owners like Jasem. The only other stick I have to wield is politely asking retailers not to carry the product until they get correct.

I'll wait for the next update to the ASIair to drop, and see what they changed, if anything, and how their public repo reflects it.