I want to write a scanner that shows nearby bluetooth devices with their RSSI values. I don't want to pair or even connect to the devices, it must be fully silent. From what I've seen unix bluetooth frameworks such as bluez require at least a connection. Is it something that is determined by the kernel / bluetooth module?
Whether the RSSI information is returned with the results of an inquiry scan depends on your Bluetooth adapter - some include this feature and others do not. You can identify the features of your local Bluetooth adapter using hciconfig, searching for the string "RSSI":
# hciconfig -a hci0 features | grep RSSI <park state> <RSSI> <channel quality> <SCO link> <HV2 packets> <interlaced iscan> <interlaced pscan> <inquiry with RSSI>
If the hardware supports inquiry with RSSI, it is not necessary to modify the kernel drivers for your Bluetooth adapter. You will need to write some code that opens a Bluetooth socket for parsing inquiry scan results to extract RSSI information. I have a Python implementation in BTFind here https://github.com/joswr1ght/btfind/blob/master/btfind.py in the BTPoller class.
Note that Inquiry mode scanning is not silent - the "seeker" is sending inquiry request packets and could therefore be detected by a sniffer. A silent alternative would be to use the Ubertooth One hardware and operate in packet sniffer mode, but you would not be able to participate in the Bluetooth network without a second Bluetooth adapter as well.