Blender image buffer types (8bpc vs 32bpc). Design question.

I’ll post this here hoping that someone who actually know the blender design would see this question and clear things up for me.

I’m writing an addon that reads pixel data from varius images (both using float buffer and byte buffer - 32 and 8), so digging through blenders source code i found this information:

/* pixels */
    /** Image pixel buffer (8bit representation):
     * - color space defaults to `sRGB`.
     * - alpha defaults to 'straight'.
     */
    unsigned int *rect;
    /** Image pixel buffer (float representation):
     * - color space defaults to 'linear' (`rec709`).
     * - alpha defaults to 'premul'.
     * 
ote May need gamma correction to `sRGB` when generating 8bit representations.
     * 
ote Formats that support higher more than 8 but channels load as floats.      */

Any idea why 8bpc PNG’s pixel color values for example are stored as sRGB and 16bpc PNG’s are converted to float buffer and linear values? Why not consistent conversion and single buffer type for all images? Some artifact from old design or any other reason?

This is my stackexchange question where you can find more information