core-probe — A Hardware Diagnostic Toolkit Written in Go
You find an old machine. Maybe it’s been sitting in a closet for five years. Maybe someone handed it to you. The question is always the same: is this thing worth reviving, and for what?
You could google the CPU, check the RAM, estimate the disk, cross-reference Linux compatibility. Or you could drop a single binary on it, run it, and get an answer in three seconds.
That’s core-probe.
Download
Linux, x86-64.
curl -L https://bensantora.com/downloads/core-probe-linux-amd64 -o core-probe
chmod +x core-probe
./core-probe
Source: core-probe-source.tar.gz | core-probe-source.zip | github.com/bensantora-tech/core-probe
How Do You Build core-probe?
Requires Go 1.21+. The entire toolkit is a single source file with no external dependencies.
go install github.com/bensantora-tech/core-probe@latest
Or build from source for specific targets:
# Current machine
go build -o core-probe main.go
# Legacy 32-bit Linux
CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -ldflags="-s -w" -o core-probe-x86 main.go
# Standard 64-bit Linux
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o core-probe-x64 main.go
# ARM (Raspberry Pi etc)
CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags="-s -w" -o core-probe-arm main.go
CGO_ENABLED=0 produces a fully static binary. No shared libraries, no runtime dependencies. If the machine runs Linux at all, it runs core-probe.
What Does core-probe Check?
core-probe reads five things directly from the kernel — no shelling out to external tools, no assumptions about what’s installed.
CPU — model name, physical core count, logical thread count, architecture (32 or 64-bit), current frequency, and capability flags: SSE2, AES, and hardware virtualization (VMX/SVM). Physical cores are counted by tracking unique physical id + core id pairs in /proc/cpuinfo, so the count is accurate on multi-socket systems.
Memory — total RAM, available RAM, free RAM, and swap. Read directly from /proc/meminfo. Available vs. free is an important distinction on Linux — available accounts for reclaimable cache; free does not.
Disk — total capacity, free space, and usage percentage for each major mountpoint (/, /home, /data, /var). Bind mounts and pseudo-filesystems are filtered out by deduplicating on filesystem ID, so the same underlying device doesn’t appear twice.
Thermal — temperature in Celsius for each thermal zone found under /sys/class/thermal/. Zones at or above 85°C are flagged critical. Zones above 75°C are flagged high. If no thermal zones are present — common on older or embedded hardware — the score is neutral rather than penalized.
Environment — hostname, kernel version parsed from /proc/version, and whether glibc is present at any of the standard paths. The glibc check is a stat call, not execution — it tells you whether the machine can run dynamically linked binaries without actually running anything.
How Does the Scoring Work?
core-probe produces a score out of 100 across five categories:
| Category | Max | What it measures |
|---|---|---|
| CPU | 30 | Core count, 64-bit support, virtualization capability |
| RAM | 30 | Total memory — the primary constraint on what software will run |
| Disk | 20 | Storage capacity and available space |
| Thermal | 10 | Whether the machine is running at safe temperatures |
| Kernel | 10 | How modern the Linux kernel is |
The score maps to one of four verdicts:
| Score | Verdict |
|---|---|
| 75 – 100 | EXCELLENT — Full revival candidate |
| 55 – 74 | GOOD — Viable for targeted deployment |
| 35 – 54 | MARGINAL — Single-purpose only |
| 0 – 34 | POOR — Parts or disposal recommended |
Each verdict comes with a list of specific use cases the machine is actually suited for — web server, DNS/DHCP node, serial console server, and so on — scaled to what the hardware can realistically handle.
Why Does core-probe Need to Be a Static Binary?
Most software today won’t start on an old machine — not because the hardware is too slow, but because the binary links against glibc or other libraries at versions that don’t exist on a 2010-era system. The software refuses before it even runs.
core-probe is built with CGO_ENABLED=0, which tells the Go compiler to bundle everything into a self-contained file. There is nothing to install and no version conflicts. The same binary runs on a kernel 2.6 machine from 2004 and a current Debian install.
That matters specifically for diagnostics. The machine you’re evaluating is often the one least likely to have modern software available.
Sample Output
====================================================
CORE-PROBE // Hardware Diagnostic Toolkit
v2.0 // github.com/bensantora-tech/core-probe
====================================================
host arch : linux/amd64
====================================================
[ PROBING HARDWARE... ]
[ CPU ]
model : Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
phys cores : 2
logical : 2
bits : 64-bit
freq : 3000 MHz
features : sse2
[ MEMORY ]
total : 3947 MB
available : 3201 MB
free : 2900 MB
swap : 2047 MB total / 2047 MB free
[ DISK ]
/ 476.3 GB total / 301.2 GB free / 37% used
[ THERMAL ]
zone0 (x86_pkg_temp) 41.0 C [ok]
[ ENVIRONMENT ]
hostname : oldbox
kernel : 5.4.0
glibc : detected at /lib/x86_64-linux-gnu/libc.so.6
note : dynamic linking available but not required by this binary
====================================================
[ WORTHINESS SCORE ]
----------------------------------------------------
cpu : 25 / 30
ram : 24 / 30
disk : 20 / 20
thermal : 10 / 10
kernel : 10 / 10
----------------------------------------------------
TOTAL : 89 / 100
----------------------------------------------------
VERDICT : EXCELLENT — Full revival candidate
[ RECOMMENDED USE CASES ]
- Lightweight web server (nginx/caddy)
- Git server / self-hosted CI
- NAS with samba/nfs
- VPN gateway / firewall
====================================================
For live system monitoring once you’ve decided to keep the machine, see newtop — per-thread CPU, memory, disk I/O, and network in a terminal UI. For socket and network exposure monitoring, see netsock.
FAQ
Q: What is core-probe?
A single static binary that evaluates old Linux hardware. It reads /proc and /sys directly, scores the machine across five categories (CPU, RAM, disk, thermal, kernel), and prints a verdict with specific use case recommendations.
Q: Does core-probe require root or sudo?
No. Everything it reads — /proc/cpuinfo, /proc/meminfo, /proc/version, /sys/class/thermal/* — is readable by any user on a standard Linux system.
Q: What Linux versions does core-probe support? Any Linux kernel 2.6 or later — roughly 2004 onward. The static binary has no library dependencies, so there’s nothing to break on old systems.
Q: Which binary should I download for my machine? If the machine is from after 2005 and is a regular PC or laptop, use the x64 binary. Use the x86 binary for pre-2005 32-bit hardware. Use the ARM binary for Raspberry Pi and similar single-board computers.
Q: How does core-probe count physical cores?
It tracks unique physical id + core id pairs from /proc/cpuinfo. This correctly handles multi-socket systems and hyperthreaded CPUs — it reports physical cores, not logical threads.
Q: What happens if thermal sensors aren’t available? The thermal score is set to 5 out of 10 — neutral, not penalized. Older hardware often lacks kernel thermal zone support, and that shouldn’t count against the machine.
Tested on Debian/CrunchBang++. Go 1.21+. Linux only — reads /proc and /sys directly.