All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Official BlackArch Linux Support: gspy is now an official package in the BlackArch repository.
- Verified arm64 Support: Goroutine ID (
goid) offsets for Go 1.17–1.24 verified onaarch64. - Architecture-specific ABI offset tables (internal/attach/elf.go).
- Fixed Go 1.23 and 1.24 GID offsets (changed from 152 to 160 due to
syscallbpaddition). - Potential nil pointer dereferences in BPF event polling and TUI update loops.
- Codecov integration for test coverage badge automation.
0.2.0 - 2026-04-20
- Breaking: Migrated to cilium/ebpf v0.21.0 API.
- Variable initialization now uses
Variables.Setloop instead of direct field assignment. - Log buffer configuration uses
LogSizeStartinstead of deprecatedLogSize.
- Variable initialization now uses
- Updated bpf2go from v0.14.0 to v0.17.1.
- Upgraded golangci-lint to v1.64.2 for Go 1.24 compatibility.
- Fixed
go.modmodule path togithub.com/Mutasem-mk4/gspy(was lowercase with underscore). - Updated all internal import paths to match corrected module path.
- GitHub Actions updated to Node.js 24-compatible action versions.
- Go 1.24 ABI support for goroutine ID extraction (
runtime.gstruct offset table). - pkg.go.dev reference badge in README.
- Go Report Card badge in README.
- OpenSSF Scorecard badge in README.
- CI build status badge in README.
- CHANGELOG.md following Keep a Changelog format.
- CONTRIBUTING.md with build, test, and submission guidance.
- BlackArch-compliant PKGBUILD with SPDX
GPL-2.0-onlylicense identifier. - Makefile
uninstalltarget for clean removal. - Test coverage reporting in CI (
go tool cover -func).
debian/copyrightSource URL typo (underscore → hyphen).debian/controlSection changed fromutilstoadmin.debian/source/formatchanged from3.0 (native)to3.0 (quilt).- Man page version header updated to 0.2.0.
- Removed redundant
debian/compat(debhelper-compat in Build-Depends).
0.1.1 - 2026-04-19
- Hardened CI pipeline for distribution acceptance audits.
- Version string now uses
git describe --tags --always --dirtyin CI builds. - Binary verification step no longer silences failures (
|| trueremoved). - TUI flash messages refactored with timed auto-clear (3-second timeout).
- Real-process BPF integration tests in CI (launches Go test target, attaches gspy).
- SPDX-License-Identifier headers on all
.goand.csource files. - Gzipped man page (
man/gspy.1.gz) included in GitHub release artifacts. - PKGBUILD relocated to
packaging/blackarch/for BlackArch submission.
- Debian build policy compliance: removed all network access during
override_dh_auto_build. - CI lint job now generates BPF bindings before running golangci-lint (was failing on missing types).
0.1.0 - 2024-12-01
- Initial release of gspy — forensic goroutine-to-syscall inspector.
- eBPF uprobe on
runtime.executefor goroutine scheduler tracing. raw_syscalls/sys_enterandraw_syscalls/sys_exittracepoints for syscall interception.- Goroutine ID extraction via
process_vm_readv(2)— zero ptrace, zero binary modification. - TID-to-GID BPF hash map for real-time goroutine-to-thread attribution.
- BPF ring buffer (16 MB) with 100ms poll interval.
- Live terminal UI (bubbletea) with 1 Hz refresh, sort, filter, and expanded goroutine view.
- Sort modes:
--top(syscall frequency),--latency(highest current latency). - Filter modes:
--filter io|net|sched|allfor targeted inspection. --readonlyforensic mode: zero writes to target process memory, SHA-256 binary hash logged.--jsonmode: newline-delimited JSON output for SIEM/jq pipeline integration.--debugmode: BPF verifier log and map statistics.- ELF symbol table resolution for user-space stack frames (no DWARF required for basic operation).
- CO-RE BPF programs with BTF support for kernel portability.
- Man page (
man/gspy.1) with full option documentation. - Complete
debian/packaging directory for Kali Linux and Parrot OS. - Makefile with
generate,build,build-only,install,test,lint,mantargets. - GPL-2.0-only license (mandatory for eBPF kernel interaction).
- arm64: goroutine ID offsets unverified — IDs may be incorrect on
aarch64. - Go generics: inlined generic functions may produce incorrect stack frame resolution.
- Stripped binaries without DWARF: partial frame resolution (hex addresses only).
- Linux kernel < 5.8: not supported (BPF ring buffer required).
- cgroupv1 namespaces: not supported.
- Measured overhead: < 2% CPU at 10K syscalls/sec on a 4-core machine.