×

INDI Library v2.0.7 is Released (01 Apr 2024)

Bi-monthly release with minor bug fixes and improvements

ASIAIR and opensource software licences

  • Posts: 22
  • Thank you received: 30
Alright, so, a follow-up/response to ZWO's press release. Let's start with their factual assertion:
We strictly follow open-source protocols for the open-source software and libraries used by ASIAIR. Our teams regularly publish open-source development of the relevant software and libraries involved.

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.9.1_apkcombo.com.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
update_package.sh
deb/
deb/indi_stargo-y_armhf.deb
deb/libcdio-paranoia2_10.2+0.94+2-4_armhf.deb
deb/libsdl2-2.0-0_2.0.9+dfsg1-1+rpt1_armhf.deb
deb/libcdio-cdda2_10.2+0.94+2-4_armhf.deb
deb/libfuse2_2.9.9-1_armhf.deb
deb/exfat-fuse_1.3.0-1_armhf.deb
deb/asiair_armhf.deb
deb/python3-ephem_3.7.6.0-7+b1_armhf.deb
deb/ffmpeg_7%3a4.1.4-1+rpt1~deb10u1_armhf.deb
deb/libntfs-3g883_2017.3.23AR.3-3_armhf.deb
deb/indi-y_armhf.deb
deb/nginx_1.11.8_armhf.deb
deb/indi_starbook-y_armhf.deb
deb/indi_eqmod-y_armhf.deb
deb/libavdevice58_7%3a4.1.4-1+rpt1~deb10u1_armhf.deb
deb/libgphoto2-6_2.5.27-1_armhf.deb
deb/ntfs-3g_2017.3.23AR.3-3_armhf.deb
deb/fuse_2.9.9-1_armhf.deb
deb/libxss1_1%3a1.2.3-1_armhf.deb
deb/libgphoto2-port12-2.5.27-1_armhf.deb
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
./
./lib/
./lib/udev/
./lib/udev/rules.d/
./lib/udev/rules.d/80-dbk21-camera.rules
./lib/udev/rules.d/99-focusers.rules
./lib/udev/rules.d/99-indi_auxiliary.rules
./lib/udev/rules.d/99-vantage.rules
./usr/
./usr/bin/
./usr/bin/indi_aaf2_focus
./usr/bin/indi_arduinost4
./usr/bin/indi_astromech_lpm
./usr/bin/indi_astrometry
./usr/bin/indi_baader_dome
./usr/bin/indi_celestron_gps
./usr/bin/indi_celestron_sct_focus
./usr/bin/indi_deepskydad_af1_focus
./usr/bin/indi_deepskydad_af2_focus
./usr/bin/indi_dmfc_focus
./usr/bin/indi_dsc_telescope
./usr/bin/indi_eval
./usr/bin/indi_fcusb_focus
./usr/bin/indi_flipflat
./usr/bin/indi_gemini_focus
./usr/bin/indi_getprop
./usr/bin/indi_gpusb
./usr/bin/indi_hid_test
./usr/bin/indi_hitecastrodc_focus
./usr/bin/indi_ieq_telescope
./usr/bin/indi_imager_agent
./usr/bin/indi_integra_focus
./usr/bin/indi_ioptronv3_telescope
./usr/bin/indi_joystick
./usr/bin/indi_lacerta_mfoc_focus
./usr/bin/indi_lakeside_focus
./usr/bin/indi_lx200basic
./usr/bin/indi_lx200generic
./usr/bin/indi_lynx_focus
./usr/bin/indi_manual_wheel
./usr/bin/indi_mbox_weather
./usr/bin/indi_meta_weather
./usr/bin/indi_microtouch_focus
./usr/bin/indi_moonlite_focus
./usr/bin/indi_moonlitedro_focus
./usr/bin/indi_nfocus
./usr/bin/indi_nightcrawler_focus
./usr/bin/indi_nstep_focus
./usr/bin/indi_onfocus_focus
./usr/bin/indi_openweathermap_weather
./usr/bin/indi_optec_wheel
./usr/bin/indi_paramount_telescope
./usr/bin/indi_pegasus_ppb
./usr/bin/indi_pegasus_upb
./usr/bin/indi_perfectstar_focus
./usr/bin/indi_pmc8_telescope
./usr/bin/indi_pyxis_rotator
./usr/bin/indi_qhycfw2_wheel
./usr/bin/indi_qhycfw3_wheel
./usr/bin/indi_quantum_wheel
./usr/bin/indi_robo_focus
./usr/bin/indi_rolloff_dome
./usr/bin/indi_scopedome_dome
./usr/bin/indi_script_dome
./usr/bin/indi_script_telescope
./usr/bin/indi_sestosenso_focus
./usr/bin/indi_setprop
./usr/bin/indi_siefs_focus
./usr/bin/indi_simulator_ccd
./usr/bin/indi_simulator_detector
./usr/bin/indi_simulator_dome
./usr/bin/indi_simulator_focus
./usr/bin/indi_simulator_gps
./usr/bin/indi_simulator_guide
./usr/bin/indi_simulator_sqm
./usr/bin/indi_simulator_telescope
./usr/bin/indi_simulator_weather
./usr/bin/indi_simulator_wheel
./usr/bin/indi_skycommander_telescope
./usr/bin/indi_skysafari
./usr/bin/indi_skywatcherAltAzMount
./usr/bin/indi_skywatcherAltAzSimple
./usr/bin/indi_smartfocus_focus
./usr/bin/indi_snapcap
./usr/bin/indi_sqm_weather
./usr/bin/indi_star2000
./usr/bin/indi_steeldrive_focus
./usr/bin/indi_synscan_telescope
./usr/bin/indi_synscanlegacy_telescope
./usr/bin/indi_tcfs_focus
./usr/bin/indi_temma_telescope
./usr/bin/indi_trutech_wheel
./usr/bin/indi_usbdewpoint
./usr/bin/indi_usbfocusv3_focus
./usr/bin/indi_v4l2_ccd
./usr/bin/indi_vantage_weather
./usr/bin/indi_watchdog
./usr/bin/indi_watcher_weather
./usr/bin/indi_weather_safety_proxy
./usr/bin/indi_wunderground_weather
./usr/bin/indi_xagyl_wheel
./usr/bin/indiserver
./usr/lib/
./usr/lib/arm-linux-gnueabihf/
./usr/lib/arm-linux-gnueabihf/indi/
./usr/lib/arm-linux-gnueabihf/indi/MathPlugins/
./usr/lib/arm-linux-gnueabihf/indi/MathPlugins/libindi_SVD_MathPlugin.so
./usr/lib/arm-linux-gnueabihf/libindiAlignmentDriver.so.1.7.8
./usr/lib/arm-linux-gnueabihf/libindidriver.so.1.7.8
./usr/lib/arm-linux-gnueabihf/libindilx200.so.1.7.8
./usr/lib/arm-linux-gnueabihf/pkgconfig/
./usr/lib/arm-linux-gnueabihf/pkgconfig/libindi.pc
./usr/share/
./usr/share/indi/
./usr/share/indi/drivers.xml
./usr/share/indi/indi_tcfs_sk.xml
./usr/bin/indi_eq500x_telescope
./usr/bin/indi_ioptronHC8406
./usr/bin/indi_lx200_10micron
./usr/bin/indi_lx200_16
./usr/bin/indi_lx200_OnStep
./usr/bin/indi_lx200ap
./usr/bin/indi_lx200ap_experimental
./usr/bin/indi_lx200ap_gtocp2
./usr/bin/indi_lx200autostar
./usr/bin/indi_lx200classic
./usr/bin/indi_lx200fs2
./usr/bin/indi_lx200gemini
./usr/bin/indi_lx200gotonova
./usr/bin/indi_lx200gps
./usr/bin/indi_lx200pulsar2
./usr/bin/indi_lx200ss2000pc
./usr/bin/indi_lx200zeq25
./usr/bin/indi_tcfs3_focus
./usr/lib/arm-linux-gnueabihf/libindiAlignmentDriver.so
./usr/lib/arm-linux-gnueabihf/libindiAlignmentDriver.so.1
./usr/lib/arm-linux-gnueabihf/libindidriver.so
./usr/lib/arm-linux-gnueabihf/libindidriver.so.1
./usr/lib/arm-linux-gnueabihf/libindilx200.so
./usr/lib/arm-linux-gnueabihf/libindilx200.so.1

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  readme.md  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/ASIAIR_1.9.1_apkcombo.com.xapk.d/Android/obb/com.zwoasi.asiair/patch/deb$ 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
bnghttp2-14,libidn2-0,librtmp1,libssh2-1,libpsl5,libnettle6,libgnutls30,libgssapi-krb5-2,libkrb5-3,libk5crypto3,libcom-err2,libldap-2.4-2,libunistring2,libho
gweed4,libgmp10,libgcrypt20,libp11-kit0,libtasn1-6,libkrb5support0,libkeyutils1,libsasl2-2,libgpg-error0,libffi6,libcurl4,libssl1.1


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  ./ASIAIR_1.9.1_apkcombo.com.xapk.d/Android/obb/com.zwoasi.asiair/patch/deb/usr/bin/indiserver
 
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 ./ASIAIR_1.9.1_apkcombo.com.xapk.d/Android/obb/com.zwoasi.asiair/patch/deb/usr/bin/indiserver

So let's go look at their repo at github.com/ZWODevTeam/indilib, 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*
./indilib/libindi/drivers/focuser/fcusb.cpp
./indilib/libindi/drivers/focuser/fcusb.h

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 ./ASIAIR_1.9.1_apkcombo.com.xapk.d/Android/obb/com.zwoasi.asiair/patch/deb/indi-y_armhf.deb

But wait, there's more!
billn@Hadriel:~/Downloads/ASIAIR$ find . -name *ffmp*
./ASIAIR_1.5.3_Apkpure.xapk.d/assets/deb/ffmpeg_7%3a4.1.4-1+rpt1~deb10u1_armhf.deb
./ASIAIR_1.5.3_Apkpure.xapk.d/lib/arm64-v8a/libijkffmpeg.so
./ASIAIR_1.5.3_Apkpure.xapk.d/lib/armeabi-v7a/libijkffmpeg.so
./ASIAIR_1.5.3_Apkpure.xapk.d/lib/x86/libijkffmpeg.so
./ASIAIR_1.5.3_Apkpure.xapk.d/lib/x86_64/libijkffmpeg.so
./ASIAIR_1.6.1_Apkpure.xapk.d/assets/deb/ffmpeg_7%3a4.1.4-1+rpt1~deb10u1_armhf.deb
./ASIAIR_1.6.1_Apkpure.xapk.d/lib/arm64-v8a/libijkffmpeg.so
./ASIAIR_1.6.1_Apkpure.xapk.d/lib/armeabi-v7a/libijkffmpeg.so
./ASIAIR_1.7_Apkpure.xapk.d/assets/deb/ffmpeg_7%3a4.1.4-1+rpt1~deb10u1_armhf.deb
./ASIAIR_1.7_Apkpure.xapk.d/lib/arm64-v8a/libijkffmpeg.so
./ASIAIR_1.7_Apkpure.xapk.d/lib/armeabi-v7a/libijkffmpeg.so
./ASIAIR_1.8.3_Apkpure.xapk.d/Android/obb/com.zwoasi.asiair/patch/deb/ffmpeg_7%3a4.1.4-1+rpt1~deb10u1_armhf.deb
./ASIAIR_1.8.3_Apkpure.xapk.d/lib/arm64-v8a/libijkffmpeg.so
./ASIAIR_1.8.3_Apkpure.xapk.d/lib/armeabi-v7a/libijkffmpeg.so
./ASIAIR_1.8.3_Apkpure.xapk.d/lib/x86/libijkffmpeg.so
./ASIAIR_1.8.3_Apkpure.xapk.d/lib/x86_64/libijkffmpeg.so
./ASIAIR_1.8_Apkpure.xapk.d/assets/deb/ffmpeg_7%3a4.1.4-1+rpt1~deb10u1_armhf.deb
./ASIAIR_1.8_Apkpure.xapk.d/lib/arm64-v8a/libijkffmpeg.so
./ASIAIR_1.8_Apkpure.xapk.d/lib/armeabi-v7a/libijkffmpeg.so
./ASIAIR_1.8_Apkpure.xapk.d/lib/x86/libijkffmpeg.so
./ASIAIR_1.8_Apkpure.xapk.d/lib/x86_64/libijkffmpeg.so
./ASIAIR_1.9.1_apkcombo.com.xapk.d/Android/obb/com.zwoasi.asiair/patch/deb/ffmpeg_7%3a4.1.4-1+rpt1~deb10u1_armhf.deb
./ASIAIR_1.9.1_apkcombo.com.xapk.d/lib/arm64-v8a/libijkffmpeg.so
./ASIAIR_1.9.1_apkcombo.com.xapk.d/lib/armeabi-v7a/libijkffmpeg.so
./ASIAIR_1.9.1_apkcombo.com.xapk.d/lib/x86/libijkffmpeg.so
./ASIAIR_1.9.1_apkcombo.com.xapk.d/lib/x86_64/libijkffmpeg.so
./ASIAIR_1.9_Apkpure.apk.d/lib/arm64-v8a/libijkffmpeg.so
./ASIAIR_1.9_Apkpure.apk.d/lib/armeabi-v7a/libijkffmpeg.so
./ASIAIR_1.9_Apkpure.apk.d/lib/x86/libijkffmpeg.so
./ASIAIR_1.9_Apkpure.apk.d/lib/x86_64/libijkffmpeg.so
./ASICAP_2.0.7_(1260_0804).apk.d/lib/arm64-v8a/libijkffmpeg.so
./ASICAP_2.0.7_(1260_0804).apk.d/lib/armeabi-v7a/libijkffmpeg.so
./ASICAP_2.0.7_(1260_0804).apk.d/lib/x86/libijkffmpeg.so
./ASICAP_2.0.7_(1260_0804).apk.d/lib/x86_64/libijkffmpeg.so

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..

[code]
billn@Hadriel:~/Downloads/ASIAIR/ASIAIR_1.9.1_apkcombo.com.xapk.d/Android/obb/com.zwoasi.asiair/main/SkyMap/data$ 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
[code]

That's Stellarium Web Engine, which is Affero GPL3 licensed: github.com/Stellarium/stellarium-web-eng...LICENSE-AGPL-3.0.txt
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 astrometry.net (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.
The following user(s) said Thank You: gehelem, lock, giorgio, nou, Mattia, Ed Lee, Chris Kuethe, Edoardo
Last edit: 11 months 4 weeks ago by Bill Nash. Reason: fixed markdown
11 months 4 weeks ago #92318

Please Log in or Create an account to join the conversation.

  • Posts: 4
  • Thank you received: 0
Bill, I'm curious if there has been any update? In a previous post you mentioned one lib author filled a notice about the license violation.
10 months 1 week ago #93354

Please Log in or Create an account to join the conversation.

  • Posts: 4
  • Thank you received: 0
Has there been any updates about ZWO and open source software?
9 months 4 weeks ago #93594

Please Log in or Create an account to join the conversation.

  • Posts: 22
  • Thank you received: 30
Nothing new to report, in the way of impactful changes. They published a source tree for their astrometry.net fork after being notified of violation, so technically they've met the requirement there. I've been in contact with a few other lib owners, with no motion to report. I've also been having a conversation with Apple's legal team about the use of GPL code in the app, without meeting the distribution terms of the GPL, but that's slow going. I won't have anything new to report until the next version drop from ZWO, or one of the lib owners responds. When I know, I'll pass it on.
9 months 4 weeks ago #93596

Please Log in or Create an account to join the conversation.

  • Posts: 22
  • Thank you received: 30
I have a theory as to why, but I'm curious why you haven't held ZWO to account for infringing indilib they way they have. There's clearly enough evidence to support the notion that they're infringing, and only doing the absolute bare minimum, if that, in terms of gpl/lgpl compliance, and only when forced to.
Last edit: 9 months 4 weeks ago by Bill Nash.
9 months 4 weeks ago #93598

Please Log in or Create an account to join the conversation.

  • Posts: 4
  • Thank you received: 0
IMO, if the lib owners aren't going to defend the GPL licenses against ZWO, then it will encourage other Chinese astro companies to start stealing from open source libraries.
9 months 4 weeks ago #93600

Please Log in or Create an account to join the conversation.

  • Posts: 22
  • Thank you received: 30
Cracking open the Seestar APK, some familiar looking bits inside.

The Skymap is, of course, Stellarium Web Engine, AGPL license, and thusly taints the Seestar application, both IOS and Android, and obligates ZWO to release source for it.
billn@Hadriel:~/Downloads/Seestar/assets/main/SkyMap/data$ ls
font  planets.ini  shaders  skydata  symbols  symbols.png  textures
billn@Hadriel:~/Downloads/Seestar/assets$ tar -xvf iscope.out
update_package.sh
deb/
deb/asiair_armhf.deb
others/
others/main_S50_1.4.8.bin
others/flash_power_led
others/imx462_CMK-OT1234-FV0_M00-2MP-F00.xml
others/imx462.ko

Cracking the asiair_armhf.deb..
billn@Hadriel:~/Downloads/Seestar/assets/deb/home/pi/ASIAIR$ find . | grep -v wav
.
./asiair.sh
./bin
./bin/air_ble
./bin/AM_Test
./bin/auto_shutdown.sh
./bin/bluetooth.sh
./bin/bsa_server
./bin/comets.py
./bin/common.sh
./bin/network.sh
./bin/old_log_mv.sh
./bin/planet.py
./bin/read_power_cm4.sh
./bin/read_power_mini.sh
./bin/read_power_rk.sh
./bin/run_update_pack.sh
./bin/set_timezone.sh
./bin/shutdownsvr.sh
./bin/Soft03Cmt.txt
./bin/start_INDI.sh
./bin/zwoair_daemon.sh
./bin/zwoair_guider
./bin/zwoair_imager
./bin/zwoair_updater
./config
./model
./model/yolov5s_small.rknn
./sound

Usual suspects for an ASIair derivation, with some new toys.

air_ble and bsa_server seem to be a bluetooth service implementation, ostensibly for connecting to the Seestar using bluetooth instead of wifi. They're both invoked by bluetooth.sh.

comets.py and planets.py are from pyephem (github.com/brandon-rhodes/pyephem), they get called by zwoair_imager:
billn@Hadriel:~/Downloads/Seestar/assets/deb/home/pi/ASIAIR/bin$ strings zwoair_imager | grep python
python3 %splanet.py %g %g %g
ps -ef|grep "python3 /etc/zwo/esptool/esptool.py"|grep -v grep|awk 'NR==1{print $2}'|xargs kill -9
python3 /etc/zwo/esptool/esptool.py -p /dev/ttyS5 -c esp32s3 write_flash 0x0000 /etc/zwo/esptool/espfirmware/bootloader.bin 0x8000 /etc/zwo/esptool/espfirmware/partition-table.bin 0xd000 /etc/zwo/esptool/espfirmware/ota_data_initial.bin 0x10000
python3 %scomets.py %g %g %g

Well, that's an interesting find. esptool.py is part of this toolset: github.com/espressif/esptool
"A Python-based, open-source, platform-independent utility to communicate with the ROM bootloader in Espressif chips"

This is GPL2.0 covered code.

Looking at that main binaries, compared to the last ASIair release:
billn@Hadriel:~/Downloads/Seestar/assets/deb/home/pi/ASIAIR/bin$ ls -al ~/Downloads/ASIAIR/ASIAIR_2.1/assets/patch/deb/home/pi/ASIAIR/bin/zwoair_*
-rwxrwxrwx 1 billn billn     1317 Jun 20  2022 /home/billn/Downloads/ASIAIR/ASIAIR_2.1/assets/patch/deb/home/pi/ASIAIR/bin/zwoair_ap_led.sh
-rwxrwxrwx 1 billn billn     5882 Nov 14  2022 /home/billn/Downloads/ASIAIR/ASIAIR_2.1/assets/patch/deb/home/pi/ASIAIR/bin/zwoair_daemon.sh
-rwxrwxrwx 1 billn billn  1601224 Feb 21 02:23 /home/billn/Downloads/ASIAIR/ASIAIR_2.1/assets/patch/deb/home/pi/ASIAIR/bin/zwoair_guider
-rwxrwxrwx 1 billn billn 18961784 Feb 21 02:23 /home/billn/Downloads/ASIAIR/ASIAIR_2.1/assets/patch/deb/home/pi/ASIAIR/bin/zwoair_imager
-rwxrwxrwx 1 billn billn   358352 Feb 21 02:23 /home/billn/Downloads/ASIAIR/ASIAIR_2.1/assets/patch/deb/home/pi/ASIAIR/bin/zwoair_updater
billn@Hadriel:~/Downloads/Seestar/assets/deb/home/pi/ASIAIR/bin$ ls -al zwoair_*
-rwxrwxrwx 1 billn billn    2357 Aug  2 22:10 zwoair_daemon.sh
-rwxrwxrwx 1 billn billn 1298064 Aug 18 00:57 zwoair_guider
-rwxrwxrwx 1 billn billn 3254720 Aug 18 00:57 zwoair_imager
-rwxrwxrwx 1 billn billn  399620 Aug 18 00:57 zwoair_updater

Looks like the guider is a bit leaner, but the imager is much, much leaner. Given that the Seestar is fixed hardware, the obvious missing bits would include the entirety of libgphoto2 and all DSLR support.

Let's crack open the imager and see what's under the hood:
billn@Hadriel:~/Downloads/Seestar/assets/deb/home/pi/ASIAIR/bin$ strings zwoair_imager  | grep ^lib | more
libcfitsio.so.7
libopencv_imgcodecs.so.3.2
libopencv_highgui.so.3.2
libopencv_imgproc.so.3.2
libopencv_core.so.3.2
libopencv_features2d.so.3.2
libopencv_calib3d.so.3.2
libopencv_video.so.3.2
libusb-1.0.so.0
libusb_get_device_descriptor
libusb_handle_events_timeout
libusb_get_config_descriptor
libusb_hotplug_register_callback
libusb_hotplug_deregister_callback
libusb_init
libusb_exit
libusb_free_config_descriptor
libz.so.1
libnova-0.16.so.0
libxml2.so.2
libjpeg.so.62
libcrypto.so.1.1
libpigpiod_if2.so.1
libwcs.so.6
libgsl.so.23
libgslcblas.so.0
libavcodec.so.58
libavutil.so.56
libavformat.so.58
librockchip_mpp.so.1
librt.so.1
libmedia-ctl.so
librkaiq.so
libeasymedia.so.1
libdl.so.2
librknn_api.so
libstdc++.so.6
libm.so.6
libgomp.so.1
libgcc_s.so.1
libpthread.so.0
libc.so.6
libusb_init fail
libusb_exit
 

Breaking those down:
libcfitsio: Used for FITS file format, typically under a custom license that allows free use.
libopencv: OpenCV libraries, typically under the Apache 2 License.
libusb: Usually under the LGPL (Lesser General Public License), or a similar permissive license.
libz: Usually under the zlib License, a permissive free software license.
libnova: Likely under LGPL.
libxml2: Typically under the MIT License.
libjpeg: Custom free software license, similar to the BSD License.
libcrypto: Part of OpenSSL, which used to be under a custom license but is now under Apache License 2.0 as of version 3.0.0.
libpigpiod_if2: Likely under the Unlicense.
libwcs: WCSLIB, FITS/World Coordinate System lib, https://www.atnf.csiro.au/people/mcalabre/WCS/wcslib/, GPL3.
libgsl: GNU Scientific Library, under the GPL. 
libavcodec, libavutil, libavformat: Part of FFmpeg, generally under the LGPL or GPL depending on how it was compiled.
librockchip_mpp: Rockchip specific (https://github.com/rockchip-linux/mpp/), Apache2/MIT license.
librt, libmedia-ctl, librkaiq, libeasymedia, libdl, librknn_api, libstdc++, libm, libgomp, libgcc_s, libpthread, libc: These are likely standard system libraries, often under the LGPL or another permissive license, depending on the system.
[code]
 
I think I noted libwcs before, possible I missed it, but libgsl is a death knell, that's not just GPL covered, that's GNU covered code. Stepping back and taking a wider gander for libwcs:
[code]
billn@Hadriel:~/Downloads/ASIAIR$ find . -name zwoair_imager
./ASIAIR_1.0.4_Apkpure.apk.d/assets/root/home/pi/ASIAIR/bin/zwoair_imager
./ASIAIR_1.0.5_Apkpure.apk.d/assets/root/home/pi/ASIAIR/bin/zwoair_imager
./ASIAIR_1.0.8/assets/root/home/pi/ASIAIR/bin/zwoair_imager
./ASIAIR_1.0.9/assets/root/home/pi/ASIAIR/bin/zwoair_imager
./ASIAIR_1.1_Apkpure.apk.d/assets/root/home/pi/ASIAIR/bin/zwoair_imager
./ASIAIR_1.3/assets/root/home/pi/ASIAIR_new/bin/zwoair_imager
./ASIAIR_2.1/assets/patch/deb/home/pi/ASIAIR/bin/zwoair_imager
billn@Hadriel:~/Downloads/ASIAIR$ find . -name zwoair_imager | xargs strings | grep libwcs
libwcs.so.6
billn@Hadriel:~/Downloads/ASIAIR$ find . -name zwoair_imager | xargs grep libwcs
Binary file ./ASIAIR_2.1/assets/patch/deb/home/pi/ASIAIR/bin/zwoair_imager matches

So that seems like a recent addition to both the ASIAir and thusly the Seestar. That likely means it's in the AM3/AM5 app as well.

Something interesting in the unpack:
billn@Hadriel:~/Downloads/Seestar/assets/deb/home/pi/ASIAIR/bin$ ls ../model/
yolov5s_small.rknn

This looks like the yolo5s_small model for use with the opencv libraries. While sifting through the updater, I found a couple hardware references that hint at the hardware involved:
ZWO AirPlus-RK3568
Rockchip RV1126

The Rockchip RV1126: www.vcancn.com/products/development-board
The RK3568: www.96rocks.com/blog/2020/11/28/introduce-rockchip-rk3568/

Some features of the RK3568:
Integrated efficient RKNN AI processing unit
NPU with 1TOPs computing power
Embedded neural network hardware accelerator, support INT8, INT16, FP16 efficient operation
NPU hardware natively supports technologies such as pre-processing merging, channel quantization, and zero skipping
Support lossless compression of INT8, INT16, FP16 neural network parameters
The NPU core supports ordinary convolution, depth separable convolution, deconvolution, hole convolution, fully connected layer and pooling layer
NPU internal blocks include multiply-add operations, activation, LUT and precision conversion units, and support custom layer construction
Support one-click model conversion, support Caffe/TensorFlow/TF-Lite/ONNX/PyTorch/Keras/Darknet mainstream framework models

Now that's all fun and interesting, so the Seestar has a neural net processor and is rocking a CV model that will let it recognize things. I don't see a plate solver in this package, but, since they're likely following the embedded OS model of the Plus and Mini model, where a fallback/reset image is stored on the MMC, the only files that will appear in the update packages like this will be things that need updating. You'll note the absence of an indi-y package, as we usually see. Given that this is fixed hardware set, I wouldn't be shocked if there's simply no need for an INDI layer. I can't find a reference to the start_INDI.sh in here anywhere, even though it's still present. Probably just overlooked cruft that didn't get cleaned out.

Hopping back up the stack a little, let's circle back to something I noted during the unpack:
billn@Hadriel:~/Downloads/Seestar/assets/others$ strings main_S50_1.4.8.bin  | more
1.2.7-64-g7ddff06-dirty
Seestar
19:02:16
Aug  7 2023
v4.4.5
tls != NULL
/IDF/components/pthread/pthread_local_storage.c
pthread_local_storage_thread_deleted_callback
cpu_start
[0;32mI (%u) %s: App cpu up.
[0;32mI (%u) %s: Pro cpu up.
[0;31mE (%u) %s: Running on single core variant of a chip, but app is built with multi-core support.
[0;31mE (%u) %s: Check that CONFIG_FREERTOS_UNICORE is enabled in menuconfig
[0;32mI (%u) %s: Starting app cpu, entry point is %p
[0;33mW (%u) %s: 32 kHz XTAL not found, switching to internal 150 kHz oscillator
rtc_clk_xtal_freq_get() == RTC_XTAL_FREQ_40M
/IDF/components/esp_system/port/soc/esp32s3/clk.c

I suspect this is what the ESP interface is for, this binary gets pushed to a daughterboard over GPIO, and this is actual mount interface for motor controls.
billn@Hadriel:~/Downloads/Seestar/assets/others$ strings main_S50_1.4.8.bin  | grep az
azm_slew1_irun
azm_slew1_irun = %d
azm_slew1_ihold
azm_slew1_ihold = %d
azm_slew2_irun
azm_slew2_irun = %d
azm_slew2_ihold
azm_slew2_ihold = %d
azm_track1_irun
azm_track1_irun = %d
azm_track1_ihold
azm_track1_ihold = %d
azm_track2_irun
azm_track2_irun = %d
azm_track2_ihold
azm_track2_ihold = %d
azm irun = %d
 azm ihold = %d
 azm irun = %d
azm irun = %d
azm ihold = %d

I'd be willing to bet the AM3/AM5 use the same base design.
Last edit: 7 months 4 weeks ago by Bill Nash. Reason: markdown fix
7 months 4 weeks ago #95040

Please Log in or Create an account to join the conversation.

  • Posts: 96
  • Thank you received: 25
Using an esp8266 or esp32 to control the motors would be entirety reasonable. Skywatcher does that in their Az-GTi/Az-GTe and probably the SA-GTi too.

Dwarf Lab uses a rockchip in their Dwarf2 smart telescope, and leans heavily on the NPU for object tracking. It's also Linux based but doesn't use indi.
The following user(s) said Thank You: Bill Nash
7 months 4 weeks ago #95044

Please Log in or Create an account to join the conversation.

  • Posts: 4
  • Thank you received: 0
SeeStar is a all-in-one smart telescope aimed at beginners, so the SeeStar software will do more imaging processing than the ASIAir. You previously noticed that ASIAir used parts of Siril. Another area to dig around is to see if SeeStar is using / stealing more code from open source image processing software.
7 months 4 weeks ago #95074

Please Log in or Create an account to join the conversation.

  • Posts: 22
  • Thank you received: 30
My only visibility into what's deployed right now is what's in the update package shipped with the APK. Since you can't download the base image as you can with the AAP, it'll be hard to know for sure until they push an update for that code, unless I can physically get my hands on one. Given their track record, that's likely the only way we'll know for sure.
7 months 4 weeks ago #95075

Please Log in or Create an account to join the conversation.

  • Posts: 22
  • Thank you received: 30
Was eyeballing a thread about stacking on the Seestar, got me wondering what ZWO was using for on-unit stacking, grabbed the 1.7.0 update and went nosing around.
root@Hadriel:/mnt/c/Users/billn/Downloads/ASIAIR# find . -name zwoair_imager | xargs grep extract.cpp
Binary file ./ASIAIR_2.1/assets/patch/deb/home/pi/ASIAIR/bin/zwoair_imager matches
Binary file ./Seestar_1.6.1.apk.d/assets/deb/home/pi/ASIAIR/bin/zwoair_imager matches
Binary file ./Seestar_1.7.0.apk.d/assets/deb/home/pi/ASIAIR/bin/zwoair_imager matches
root@Hadriel:/mnt/c/Users/billn/Downloads/ASIAIR# strings ASIAIR_2.1/assets/patch/deb/home/pi/ASIAIR/bin/zwoair_imager | grep extract.cpp
buf->bptr (bufw*bufh=%lu elements) at line %d in module ./sep/extract.cpp !
cat->thresh (nobj=%lu elements) at line %d in module ./sep/extract.cpp !
cat->npix (nobj=%lu elements) at line %d in module ./sep/extract.cpp !
cat->tnpix (nobj=%lu elements) at line %d in module ./sep/extract.cpp !
cat->xmin (nobj=%lu elements) at line %d in module ./sep/extract.cpp !
cat->xmax (nobj=%lu elements) at line %d in module ./sep/extract.cpp !
cat->ymin (nobj=%lu elements) at line %d in module ./sep/extract.cpp !
cat->ymax (nobj=%lu elements) at line %d in module ./sep/extract.cpp !

So that's SEP (github.com/kbarbary/sep), which is LGPLv3. It's statically compiled, though, not brought in as a lib.
7 months 3 weeks ago #95233

Please Log in or Create an account to join the conversation.

  • Posts: 22
  • Thank you received: 30
There's a thread over on CN about a jailbreak for the AAP/Seestar, if anyone wants to poke around under the hood of their Seestar. I don't have one or access to one, so all I can see is what goes out in the patches, but not the base build.
4 months 1 week ago #97525

Please Log in or Create an account to join the conversation.

Time to create page: 0.937 seconds