Gdk: virtual vs logical devices

Hi,

In GdkSeat there are virtual devices we can get with e.g. Gdk.Seat.get_keyboard and physical devices we can get with Gdk.Seat.get_devices .

What is their specific purpose, and when shall we use one or the other?