Build Targets
## What
This is a request for comment on the build targets Cuprate should support.

The common 2 architectures:
- `x86_64`
- `ARM64`

and common 3 operating systems:
- Windows
- macOS
- Linux

would be a given, however supporting older/obscure combinations is the discussion point.

As an alternative to Monero and not the main implementation, only supporting common targets may be okay.

## Which
Relatively old/obscure architectures supported by Monero:
- `x86`
- `armv7`
- `armv6`
- Many cross-compile targets, e.g `x86_64-w64-mingw32`

Relatively old/obscure OS's supported by Monero:
- FreeBSD
- OpenBSD
- NetBSD
- Solaris

## Pros
- Build target parity with Monero
- Wider accessibility on different machines

## Cons
- Cost of maintenance and testing
- Code portability limitations

In terms of code portability:
- The dependency tree must also support targets we support
- 64-bit invariants cannot be assumed

For example:
```rust
u64 as usize; 
```
would be preferred to:
```rust
match usize::try_from(u64) {
    Ok(u) => u,
    Err(_) => /* handle the conversion error */
}
```
assuming only 64-bit targets will be supported, otherwise it might lead to disaster on 32-bit platforms.

Other types/code relying on pointer sizes would need to be accounted for, as well as OS specifics (e.g directory locations).