×

INDI Library v2.0.6 is Released (02 Feb 2024)

Bi-monthly release with minor bug fixes and improvements

ASIAIR and opensource software licences

  • Posts: 22
  • Thank you received: 30
Cracking open the ASIAir 2.0 xapk..
billn@Hadriel:~$ cp Downloads/ASIAIR_2.0_Apkpure.xapk .
billn@Hadriel:~$ file ASIAIR_2.0_Apkpure.xapk
ASIAIR_2.0_Apkpure.xapk: Zip archive data, at least v2.0 to extract
billn@Hadriel:~$ mkdir apk
billn@Hadriel:~$ cd apk
billn@Hadriel:~/apk$ unzip ../ASIAIR_2.0_Apkpure.xapk > apk.manifest
billn@Hadriel:~/apk$ ls
Android  apk.manifest  com.zwoasi.asiair.apk  icon.png  manifest.json

APKs are just ZIP compressed files, nothing exotic. I'm not an android dev, xapk looks like some type of extended APK format, so there's an APK inside the APK.

After some hunting, turns out I didn't need to unpack the extra APK. In previous versions, what I was looking for was in the assets/ dir of the APK, but this time it's in the patch section of the XAPK:
billn@Hadriel:~/apk/Android/obb/com.zwoasi.asiair$ unzip patch.76.com.zwoasi.asiair.obb
Archive:  patch.76.com.zwoasi.asiair.obb
   creating: patch/
  inflating: patch/.gitignore
  inflating: patch/air_pi3
  inflating: patch/air_pi4
  inflating: patch/readme.md

air_pi3 and air_pi4 are themselves bzip2 compressed archives, these will be transferred to the ASIair gadgets for updates.
billn@Hadriel:~/apk/Android/obb/com.zwoasi.asiair/patch$ file air*
air_pi3: bzip2 compressed data, block size = 900k
air_pi4: bzip2 compressed data, block size = 900k
 
billn@Hadriel:~/apk/Android/obb/com.zwoasi.asiair/patch$ bunzip2 air_pi4
bunzip2: Can't guess original name for air_pi4 -- using air_pi4.out
 
billn@Hadriel:~/apk/Android/obb/com.zwoasi.asiair/patch$ bunzip2 air_pi4
bunzip2: Can't guess original name for air_pi4 -- using air_pi4.out
 
billn@Hadriel:~/apk/Android/obb/com.zwoasi.asiair/patch$ tar -xvf air_pi4.out
update_package.sh
deb/
deb/libopencv-calib3d3.2_3.2.0+dfsg-6_armhf.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/libopencv-flann3.2_3.2.0+dfsg-6_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/librockchip-mpp1_1.5.0-1_armhf.deb
deb/libopencv-video3.2_3.2.0+dfsg-6_armhf.deb
deb/libopencv-ml3.2_3.2.0+dfsg-6_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
deb/libopencv-features2d3.2_3.2.0+dfsg-6_armhf.deb
others/
others/pro-smb.conf
others/plus-smb.conf
others/dwc2.ko
others/xhci-pci.ko

I assume the IOS package does something similar, both app stores are used as a vehicle to distribute the modified libraries that ZWO hasn't provided source for, which puts them in breach of contract for the relevant GPL/LGPL/BSD licenses, which means they have no rights to distribute the code, which puts them in violation of the developer agreements for both stores.

Fun!

edit: whoops markdown
The following user(s) said Thank You: gehelem
Last edit: 1 year 1 month ago by Bill Nash. Reason: fixed markdown formatting
1 year 1 month ago #89997

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

  • Posts: 22
  • Thank you received: 30
And to answer the original question, the Pro and Plus get the same updates. The update scripts in the asi_pi4 tarball check for a Pi4 or the RK3568 board.
billn@Hadriel:~/apk/Android/obb/com.zwoasi.asiair/patch$ grep Rock update_package.sh
cat /proc/device-tree/model|grep -i -e 'Pi 4' -e 'Pi Compute Module 4' -e 'ZWO AirPlus-RK3568 (Linux)' -e 'Rockchip'
        cat /proc/device-tree/model|grep -i -e 'Pi Compute Module 4' -e 'ZWO AirPlus-RK3568 (Linux)' -e 'Rockchip'
cat /proc/device-tree/model|grep -i -e 'Pi Compute Module 4' -e 'ZWO AirPlus-RK3568 (Linux)' -e 'Rockchip'
1 year 1 month ago #90002

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

  • Posts: 349
  • Thank you received: 107
1 year 1 month ago #90014

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

  • Posts: 167
  • Thank you received: 54
Yes they did, but only credits
I've seen a few screenshots, a menu on asiair app, with links

Nothing related to the modified code afaik
1 year 1 month ago #90015

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

  • Posts: 167
  • Thank you received: 54
1 year 1 month ago #90016
Attachments:

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

  • Posts: 22
  • Thank you received: 30
Not that I've found rooting around in the device. Even if they added credits to the app, that would only satisfy the Phd2 license, I believe. LGPL and GPL3 covered tools, like indilib, Siril, and astrometry.net all require modified source disclosure, in addition to propagating the license. I've been asking ZWO for their modified code repo for months and gotten stonewalled.
The following user(s) said Thank You: Dennis Stav
Last edit: 1 year 1 month ago by Bill Nash.
1 year 1 month ago #90023

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

  • Posts: 111
  • Thank you received: 41
There exists a website of the FSF with more information and contacts regarding GPL violations:
gpl-violations.org/ and even a wikipedia page linking also to the website:
en.wikipedia.org/wiki/Gpl-violations.org
1 year 1 month ago #90025

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

  • Posts: 22
  • Thank you received: 30
GPL violations are an interesting bit, and legally, you need 'standing' in order to file a suit in the courts to compel or otherwise sanction violators. Today, any owner of the libs in question can shoot ZWO an email and let them know they're in violation and their rights to distribute/include the libs in their product are thusly terminated, which would force ZWO to comply or otherwise retool, against the threat of legal action.

Alternatively, the GPL/LGPL both contain language stating that the license to redistribute is automatically terminated if the license is violated. Demonstrating the violation, as I have here, is probably sufficient evidence for a third party, such as the Google and Apple app stores, to find on their own that ZWO is in violation of their respective developer agreements, as each agreement requires the developer to have legal and valid distribution rights for anything in the app. I think I've effectively shown here that is not the case, not just for indilib, but also potentially for code lifted from Siril and a few others. User complaints in the app stores to bring this to their attention are an option, and the app stores can then act on their own, to protect themselves from liability. Given that ZWO has ignored user requests to comply, for well over a year now, that's probably the only other thing that would get ZWO to honor their obligations to the community and developers that they're effectively stealing from. Asking vendors carrying the ASIair to stop selling it until they comply is also an option. ZWO clearly has ignored the users, but they won't ignore the channels they need to continue profiting from their malfeasance.

The whole thing really undermines anything ZWO has done to get more people into the hobby and community, in my opinion. Moving forward, if they want to fix this, they should retool their tablet app to function against a stock INDI server in the same manner that Kstars+EKOS does, so it uses the indilib appropriately, and allows for interoperation with devices from other manufacturers, which they can then say are completely unsupported, your mileage may vary, and still allow folks with the ability to support their own drivers and hardware to do so. That would be using open source code in the same spirit that they've benefited from, instead of pulling up the ladder behind them.
Last edit: 1 year 1 month ago by Bill Nash.
1 year 1 month ago #90031

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

  • Posts: 22
  • Thank you received: 30
Cracking open the 2.1.48 beta released this weekend..
billn@Hadriel:~/Downloads/ASIAIR_2.1.48/assets/patch$ tar -xvf air_pi4.out
update_package.sh
deb/
deb/libopencv-calib3d3.2_3.2.0+dfsg-6_armhf.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/libopencv-flann3.2_3.2.0+dfsg-6_armhf.deb
deb/indi_starbook-y_armhf.deb
deb/libgphoto2-6_2.5.30-1_armhf.deb
deb/indi_eqmod-y_armhf.deb
deb/libavdevice58_7%3a4.1.4-1+rpt1~deb10u1_armhf.deb
deb/librockchip-mpp1_1.5.0-1_armhf.deb
deb/libgphoto2-port12-2.5.30-1_armhf.deb
deb/libopencv-video3.2_3.2.0+dfsg-6_armhf.deb
deb/libopencv-ml3.2_3.2.0+dfsg-6_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/libopencv-features2d3.2_3.2.0+dfsg-6_armhf.deb
others/
others/boot-mini.img
others/pro-smb.conf
others/plus-smb.conf
others/dwc2.ko
others/fw_bcm43456c5_ag.7.45.96.125.20220120.bin
others/AP6256_NVRAM_V1.4_06112021.txt
others/xhci-pci.ko

Dependency changes since last version:
deb/libgphoto2-6_2.5.27-1_armhf.deb
deb/libgphoto2-port12-2.5.27-1_armhf.deb

Cracking open the update:
billn@Hadriel:~/Downloads/ASIAIR_2.1.48/assets/patch/deb/asiair_armhf$ tar -xvf data.tar
./
./etc/
./etc/default/
./etc/default/dnsmasq
./etc/default/hostapd
./home/
./home/pi/
./home/pi/ASIAIR/
./home/pi/ASIAIR/asiair.sh
./home/pi/ASIAIR/bin/
./home/pi/ASIAIR/bin/Soft03Cmt.txt
./home/pi/ASIAIR/bin/auto_shutdown.sh
./home/pi/ASIAIR/bin/comets.py
./home/pi/ASIAIR/bin/common.sh
./home/pi/ASIAIR/bin/mount_udisk.sh
./home/pi/ASIAIR/bin/network.sh
./home/pi/ASIAIR/bin/old_log_mv.sh
./home/pi/ASIAIR/bin/planet.py
./home/pi/ASIAIR/bin/read_power_cm4.sh
./home/pi/ASIAIR/bin/read_power_mini.sh
./home/pi/ASIAIR/bin/read_power_rk.sh
./home/pi/ASIAIR/bin/run_update_pack.sh
./home/pi/ASIAIR/bin/set_timezone.sh
./home/pi/ASIAIR/bin/start_INDI.sh
./home/pi/ASIAIR/bin/zwoair_ap_led.sh
./home/pi/ASIAIR/bin/zwoair_daemon.sh
./home/pi/ASIAIR/bin/zwoair_guider
./home/pi/ASIAIR/bin/zwoair_imager
./home/pi/ASIAIR/bin/zwoair_updater
./home/pi/ASIAIR/config
./home/pi/ASIAIR/lib/
./home/pi/ASIAIR/lib/libASICamera2.so
./home/pi/ASIAIR/lib/libEAFFocuser.so
./home/pi/ASIAIR/lib/libEFWFilter.so
./usr/
./usr/bin/
./usr/bin/plot-constellations_my
./usr/bin/solve-field_my
./usr/bin/zwo_deleteStarsTool

Usual suspects, guider, imager, updater. zwo_deleteStarsTool is a Siril derivative.

solve-field_my is a modified astrometry.net solve-field.
billn@Hadriel:~/Downloads/ASIAIR_2.1.48/assets/patch/deb/asiair_armhf$ strings usr/bin/solve-field_my  | grep astrometry
astrometry-engine
For details, visit http://astrometry.net.
https://github.com/dstndstn/astrometry.net
use this config file for the "astrometry-engine" program
run astrometry-engine once, rather than once per input file
just write the augmented xylist files; don't run astrometry-engine.
Visit us on the web at http://astrometry.net/
../include/astrometry

plot-constellations_my is, as well:
billn@Hadriel:~/Downloads/ASIAIR_2.1.48/assets/patch/deb/asiair_armhf$ strings usr/bin/plot-constellations_my | grep -i astrometry
This program is part of the Astrometry.net suite.
For details, visit http://astrometry.net.
https://github.com/dstndstn/astrometry.net
../include/astrometry

The astrometry license started as BSD, but is GPL3 'tainted', so all GPL3 terms apply:
"NOTE: Parts of the code written by the Astrometry.net Team are
licensed under the 3-clause BSD-style license below. HOWEVER, since
this code uses libraries licensed under the GNU GPL (including a
vendored GSL), the whole work must be distributed under the GPL
version 3 or later."

libindi version is still 1.7.8-22, so changes this round are likely purely in the base asiair package, to go with the libgphoto2 update, expanding camera support for some Sony bodies.

Still no source code included with the update. My last emails with ZWO, I was assured that their CEO would be in touch with me, 'within the week', two weeks ago. I've had a lovely conversation with myself in the interim.
The following user(s) said Thank You: gehelem, Chris Kuethe
1 year 1 month ago #90515

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

  • Posts: 22
  • Thank you received: 30
I went digging through the imager binary, looking for the strings that identify supported camera bodies, and ran across something fun.
gp_camera_new error: %s
gp_abilities_list_new failed (%d): %s
gp_abilities_list_load failed (%d): %s
gp_abilities_list_lookup_model failed (%d): %s
gp_abilities_list_get_abilities (%d): %s
gp_port_info_list_new (%d): %s
gp_port_info_list_load (%d): %s
gp_port_info_list_count (%d): %s
The port you specified ('%s') can not be found. Please specify one of the ports found by 'gphoto2 --list-ports' and make sure the spelling is correct (i.e. with prefix 'serial:' or 'usb:').
gp_port_info_list_get_info (%d): %s
gp_camera_init error: %s

It appears that whole items from the libgphoto2/examples directory (github.com/gphoto/libgphoto2/blob/master/examples/autodetect.c) are included in the zwoair_imager binary. That code is LGPL-2.1, which taints zwo's whole imager with the same license requirements (github.com/gphoto/libgphoto2/blob/master/COPYING):
"These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it."

Whoops.
The following user(s) said Thank You: gehelem, Alexandre Chapellon, Chris Kuethe
1 year 1 month ago #90517

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

  • Posts: 22
  • Thank you received: 30
Well, looks like my nagging has shown some progress:

github.com/ZWODevTeam/indilib

The owner finally responded to my Facebook DMs, we're now having a conversation about the other covered code I found.

Edit: The repo is woefully incomplete. It's a 1.7.5 fork, but the running binaries are 1.7.8, with 22 releases worth of revisions not reflected here.
The following user(s) said Thank You: gehelem, nou
Last edit: 1 year 1 month ago by Bill Nash.
1 year 1 month ago #90782

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

  • Posts: 22
  • Thank you received: 30
billn@Hadriel:~/Downloads/ASIAIR_V2.1/assets/patch/deb/asiair_armhf/home/pi/ASIAIR/bin$ strings zwoair_imager | egrep '[a-z]\(\)' | more
operator()
total() == 0 || data != NULL
operator()
in get_array_subtractor(): %d
ERROR in weigthed_frame_average: divide_accumulator() fails
ERROR in weigthed_frame_average: accumulate_weighted() fails
get_maximal_connected_component() fails
original aixs calculated by function getAxis():azalt (%lf,%lf)
LibRaw::unpack()
jpeg_thumb()
layer_thumb()
ppm_thumb()
android_tight_load_raw()
android_loose_load_raw()
vc5_dng_load_raw_placeholder()
canon_600_load_raw()
fuji_compressed_load_raw()
fuji_14bit_load_raw()
canon_load_raw()
lossless_jpeg_load_raw()
canon_sraw_load_raw()
crxLoadRaw()
lossless_dng_load_raw()
packed_dng_load_raw()
pentax_load_raw()
nikon_load_raw()
nikon_coolscan_load_raw()
nikon_load_sraw()
nikon_load_yuv_load_raw()
rollei_load_raw()
phase_one_load_raw()
phase_one_load_raw_c()
hasselblad_load_raw()
leaf_hdr_load_raw()
unpacked_load_raw()
unpacked_load_raw_reversed()
sinar_4shot_load_raw()
imacon_full_load_raw()
hasselblad_full_load_raw()
packed_load_raw()
broadcom_load_raw()
nokia_load_raw()
panasonic_load_raw()
panasonicC6_load_raw()
panasonicC7_load_raw()
olympus_load_raw()
minolta_rd175_load_raw()
quicktake_100_load_raw()
kodak_radc_load_raw()
kodak_jpeg_load_raw()
lossy_dng_load_raw()
kodak_dc120_load_raw()
eight_bit_load_raw()
kodak_yrgb_load_raw()
kodak_262_load_raw()
kodak_65000_load_raw()
kodak_ycbcr_load_raw()
kodak_rgb_load_raw()
sony_load_raw()
sony_arw_load_raw()
sony_arw2_load_raw()
sony_arq_load_raw()
samsung_load_raw()
samsung2_load_raw()
samsung3_load_raw()
smal_v6_load_raw()
smal_v9_load_raw()
x3f_load_raw()
pentax_4shot_load_raw()
deflate_dng_load_raw()
uncompressed_fp_dng_load_raw()
nikon_load_striped_packed_raw()
nikon_load_padded_packed_raw()
nikon_14bit_load_raw()

These functions come from: github.com/LibRaw
LibRaw is LGPL-2.1/CDDL-1.0, both of which require source disclosure.

In this output, when you see function names in this format 'name()', it's a "statically linked" library, which means the source is included in the binary at compile time.

Conversely, a dynamically linked library inclusion would look like this, the name of the DLL and then a list of exposed functions.
libASICamera2.so
libusb_handle_events_timeout
ASIGetROIFormat
ASIStartExposure
ASIGetNumOfConnectedCameras
libusb_exit
ASIGetStartPos
ASISetControlValue
ASICloseCamera
ASIStartVideoCapture
ASIInitCamera
__pthread_key_create
ASIOpenCamera
ASIGetSDKVersion
ASIGetCameraProperty
ASIGetCameraPropertyByID
libusb_get_device_descriptor
ASIGetControlCaps
_Z13ASISetMemSavei8ASI_BOOL
ASIStopExposure
_Z13ASIIsExposingiR8ASI_BOOL
ASIGetVideoData
_Z21ASIGetCameraLocalPathiPPc
libusb_get_bus_number
ASISetStartPos
libusb_init
ASIGetDataAfterExp
ASIGetLMHGainOffset
ASIGetControlValue
ASISetROIFormat
ASIGetExpStatus
_ITM_deregisterTMCloneTable
ASIGetNumOfControls
ASICameraCheck
__gmon_start__
_ITM_registerTMCloneTable

From what I've seen rooting around in here, this binary is both statically and dynamically linked, and even has shell calls embedded in it. It's a mess.

This was an interesting find:
dcraw v9.26
%04d:%02d:%02d %02d:%02d:%02d
12435867
# EXPTIME=%0.5f
# TIMESTAMP=%d
# ISOSPEED=%d
# APERTURE=%0.1f
# FOCALLEN=%0.1f
# MAKE=%s
# MODEL=%s
WIDTH %d
HEIGHT %d
DEPTH %d
MAXVAL %d
TUPLTYPE %s
ENDHDR
WIDTH %d
HEIGHT %d
DEPTH %d
MAXVAL %d
TUPLTYPE %s
ENDHDR
# EXPTIME=%0.5f
# TIMESTAMP=%d
# ISOSPEED=%d
# APERTURE=%0.1f
# FOCALLEN=%0.1f
# MAKE=%s
# MODEL=%s
%d %d
%d %d
write_ppm_thumb()
ppm16_thumb()
%d %d
rollei_thumb()

The dcraw library (github.com/ncruces/dcraw/blob/master/LICENSE) is GPL-2.0. If the other LGPL code in this binary wasn't enough, this is game over, the GPL license is far stricter about source disclosure.
The following user(s) said Thank You: gehelem, Chris Kuethe
1 year 1 month ago #90945

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

Time to create page: 0.955 seconds