{"adoption": {"forks": 117, "observed_at": "2026-08-28T04:03:46.217497+00:00", "stars": 1148}, "canonical_url": "https://ross.abutalabs.com/products/openstick", "card": {"archived": false, "artifact_type": "learning-resource", "description": "reverse engineering on msm8916 based 4G modem.", "domain": ["embedded-systems", "hardware", "operating-systems", "reverse-engineering", "self-hosted"], "enriched": true, "function": ["reverse-engineering", "embedded"], "health_score": 20, "homepage": null, "language": null, "license": null, "license_family": "other", "maturity": "active", "member_repos": ["OpenStick/OpenStick"], "name": "OpenStick/OpenStick", "platform": ["embedded", "windows"], "pushed_at": "2022-05-27T15:23:41+00:00", "repo": "OpenStick/OpenStick", "stars": 1148, "tags": ["msm8916", "4g-modem", "mainline-linux", "postmarketos", "openwrt", "handscemod", "qualcomm", "firmware-dump", "flashing-tool", "arm-trusted-firmware", "u-boot", "device-tree", "wifi-driver", "modem-driver", "debian", "rootfs", "partition-table", "bootloader", "community-wiki", "non-commercial-license", "linux-kernel-porting", "device-driver", "linux", "arm"], "topics": [], "urls": [], "use_cases": ["turn a cheap msm8916 4G USB modem dongle into a small Linux computer", "run mainline Linux or postmarketOS on a Qualcomm msm8916 stick", "flash a custom Debian or OpenWrt image onto a 4G modem", "reverse engineer Qualcomm msm8916 firmware and peripherals", "use a 4G dongle as a self-hosted mini server or router", "learn how to port mainline kernel drivers to an embedded ARM device", "build a tiny ARM Linux board from commodity modem hardware"], "what_it_is": "OpenStick is a reverse-engineering and mainline Linux porting project for msm8916-based 4G modem dongles, documenting how to replace the stock Android-based firmware with a full Linux system. It provides flashing images, kernel patches, and wiki documentation so these cheap USB modems can run Debian, postmarketOS, or an OpenWrt-derived build called HandsomeMod.", "when_to_avoid": ["you need a supported production product or commercial use - commercial use is explicitly forbidden", "you need working hardware video encoding, which is not yet functional", "you expect support for every WiFi model, since some are not yet supported", "you want to keep the device running Android or restore the stock firmware, as flashing overwrites partitions and the bootloader with no provided rollback"], "when_to_choose": ["you own an msm8916-based 4G modem stick and want to repurpose it as a Linux device", "you want to experiment with mainline Linux on very cheap ARM hardware", "you need documentation and images for flashing these dongles and driving their peripherals", "you are interested in reverse engineering Qualcomm modem firmware for learning purposes"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/openstick", "repo": "OpenStick/OpenStick", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.217497+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:33:48.001619+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bbc79dcf6f966809b0ff992d9022de54a06db147bc51f24d0131e252e99c5992", "fetched_at": "2026-08-28T04:03:46.217497+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpenStick/OpenStick"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.217497+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:33:48.001619+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bbc79dcf6f966809b0ff992d9022de54a06db147bc51f24d0131e252e99c5992", "fetched_at": "2026-08-28T04:03:46.217497+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpenStick/OpenStick"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:33:48.001619+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bbc79dcf6f966809b0ff992d9022de54a06db147bc51f24d0131e252e99c5992", "fetched_at": "2026-08-28T04:03:46.217497+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpenStick/OpenStick"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.217497+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.217497+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.217497+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:33:48.001619+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bbc79dcf6f966809b0ff992d9022de54a06db147bc51f24d0131e252e99c5992", "fetched_at": "2026-08-28T04:03:46.217497+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpenStick/OpenStick"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.217497+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.217497+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:33:48.001619+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bbc79dcf6f966809b0ff992d9022de54a06db147bc51f24d0131e252e99c5992", "fetched_at": "2026-08-28T04:03:46.217497+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpenStick/OpenStick"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.217497+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.217497+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.217497+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:33:48.001619+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bbc79dcf6f966809b0ff992d9022de54a06db147bc51f24d0131e252e99c5992", "fetched_at": "2026-08-28T04:03:46.217497+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpenStick/OpenStick"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.217497+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:46.217497+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:33:48.001619+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bbc79dcf6f966809b0ff992d9022de54a06db147bc51f24d0131e252e99c5992", "fetched_at": "2026-08-28T04:03:46.217497+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpenStick/OpenStick"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:33:48.001619+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bbc79dcf6f966809b0ff992d9022de54a06db147bc51f24d0131e252e99c5992", "fetched_at": "2026-08-28T04:03:46.217497+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpenStick/OpenStick"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:33:48.001619+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bbc79dcf6f966809b0ff992d9022de54a06db147bc51f24d0131e252e99c5992", "fetched_at": "2026-08-28T04:03:46.217497+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpenStick/OpenStick"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:33:48.001619+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "bbc79dcf6f966809b0ff992d9022de54a06db147bc51f24d0131e252e99c5992", "fetched_at": "2026-08-28T04:03:46.217497+00:00", "kind": "readme", "missing": false, "url": "https://github.com/OpenStick/OpenStick"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1744, "days_push": 1559, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}