Ref : https://github.com/python/cpython/pull/25174

https://github.com/localstack/localstack/blob/5a5edcd9d9ccbd6a56f23d71e3a1131b8c814996/localstack/utils/common.py#L324
return s and '%s%s' % (s[0].lower(), s[1:])
def first_char_to_upper(s):
    return s and '%s%s' % (s[0].upper(), s[1:])
def format_number(number, decimals=2):
    return ('{0:.%sg}' % decimals).format(number)
def is_number(s):
    try:
        float(s)  
        return True
    except (TypeError, ValueError):
        return False
def is_mac_os():
    return bootstrap.is_mac_os()
def is_linux():
    return bootstrap.is_linux()
def is_windows():
    return platform.system().lower() == 'windows'
def is_alpine():
    try:
        with MUTEX_CLEAN:
            if '_is_alpine_' not in CACHE:
                CACHE['_is_alpine_'] = False
                if not os.path.exists('/etc/issue'):
                    return False
                out = to_str(subprocess.check_output('cat /etc/issue', shell=True))
                CACHE['_is_alpine_'] = 'Alpine' in out
    except subprocess.CalledProcessError:
        return False
    return CACHE['_is_alpine_']
def get_arch():