I have a very unusual question about how Linux programs talk to the kernel.

Simplified for brevity and... well, simplicity.

In a word, the "standard C library", often abbreviated to libc. Any program (beyond the uselessly trivial) cannot be run without external help.

Take a program written in C.

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
  int *dyn_int = malloc(sizeof(int));

  *dyn_int = 10;
  printf("%d\n", *dyn_int);

  free(dyn_int);
  return 0;
}

The C programming language defines many things,
An integer number. How you declare a variable is an integer. What operations can be performed on it.
Dynamically allocated memory. How you request some memory. Data-type sizes. How you query what the size of a data-type is.
Etc.

But the actual implementation details are not dealt with by the programming language.
Some of these implementation details are hardware-specific.
Different processor architectures have differing ways of storing and processing common data-types.
Some architectures are "big endian" (twenty four), others are "little endian" (four and twenty) Some architectures define an integer to be 16 bits big, others define it as 32 bits big.

A programming language doesn't know about these things and, by design, needs to be as generic as possible.
The implementation is dealt with by the standard C library.

But the standard C library doesn't know everything.
It too needs help, and some of the implementation is provided by the kernel.

Opening a file, for example.
Your program doesn't know (nor care) that a file is stored on an EXT4 filesystem. All it knows is how to request the standard C library to open a file.
Yet the standard C library doesn't know (nor care) about a specific filesystem either. It passes such requests off to the kernel.
These are called "syscalls", and they bridge the user-space / kernel-space divide.

So, the standard C library implements most of the C language (with the rest being implemented by the kernel), and effectively defines the "platform" of a system.
POSIX is a system platform.
All Unix and Unix-like operating systems are POSIX systems.
POSIX defines what needs to be implemented in the standard C library.
One such C library is glibc, the GNU C library
Another is BSD libc

When programs run, do they send series of 1s and 0s to the kernel

No, programs are compiled against a certain standard C library which implements platform-specific operations.

why windows software can't work on Linux machines

Different platforms.

/r/linux4noobs Thread