I use BFD on our Linux servers, in combination with Linux Virtual Server (LVS, or a Load Balancer). There are 2 LVS servers which use BFD to choose who receives traffic from the core (a Juniper EX4200). The LVS servers also share state so that they can fail over between each other and keep routing existing sessions.
With Juniper you can actually set a static route to be live or not live based on BFD directly, so no need to use BGP in our case though that is common for routers that can't do it directly on a static route.
I use the implementation in bird (http://bird.network.cz/) for both IPv4 and IPv6
With Juniper you can actually set a static route to be live or not live based on BFD directly, so no need to use BGP in our case though that is common for routers that can't do it directly on a static route.