[Nexus 4 General] markd0wn:
[INFO] Android 4.3 JSS15J&JSS15Q vs. JWR66V&JWR66Y, Custom Kernels and Graphic Issues

So, since this issue pops up often in various threads ever since 4.3 was released, I thought I'd make a thread I could point people to instead of repeating the same explanation over and over.

This has been discussed greatly in various Kernel/ROM development threads and I've been even getting PM's about it so I'll try explaining everything here. Most info is taken from discussions made on CyanogenMod-related threads, Franco kernel thread, thracemerin's WiFi-fix thread, and Google-related sources, so thanks also goes to everyone who participated.

On to business...

Background:

When Google released Android 4.3, it came in a few forms. One is the familiar OTA update zip and factory images. This is what people refer to as 'stock'. The build number for that stock release is JWR66V, also known as Android 4.3r1. This was later updated to JWR66Y (Android 4.3r1.1).

As you all know, Android is open source, which leads us to the Android Open Source Project (AOSP). This is where the source for Android located, and one could build the operating system/kernel (with provided drivers) from scratch and make a working flashable operating system. This is also the 'base' for custom ROMs.

AOSP has newer android revisions - Android 4.3r2.1, build number JSS15J, and Android 4.3r2.2, build number JSS15Q. These builds are newer than 'stock' JWR66V/JWR66Y, but they are official, are made by Google, and are available for anyone to build from scratch, just like JWR66V/JWR66Y. The differences are Google Apps, such as Google+, YouTube, Gmail, etc, which will not be included in an AOSP build, but could be downloaded from the store (or available as a flashable zip) anyway. AOSP also has a different browser while 'stock' comes with Google Chrome (which you could manually download if you wanted to). The system itself is still the same Android. If one decides to build Android from the older JWR66V/JWR66Y revisions, they will have the same system as someone else who flashed stock.

Why didn't Google release JSS15J as stock?

A Google employee mistakenly thought that JSS15J only has changes related exclusively to the new Nexus 7 device. He later apologized and acknowledged his mistake. JSS15J has an updated Nexus 4 kernel with dozens of GPU commits/improvements.

Which build is better?

Depending on who you ask. If newer is better, JSS15Q is better. If factory images are better, JWR66Y is better.

Which build should I use?

People who like factory images will stay with factory images. People who like the stock experience but care less about "factory images" could use a clean non-customized JSS15Q build. In a way, JSS15Q could be considered 'stock AOSP' if it's not customized. It's even more minimalistic than what comes with the factory images, because applications such as Google Keep/Earth/Maps and so on are not forced as system apps, and can be optionally installed from the store only if you want them.

Any other differences besides the updated kernel/GPU commits?

Most changes are under-the-hood. There was an updated network setting found in JSS15J/Q that doesn't exist in JWR66V/Y.

I heard something about a Wi-Fi change though?

There is indeed a major difference related to Wi-Fi. I won't get into many details here as there is a dedicated thread with months of discussions, but in short, JWR66V & JWR66Y still have the Wi-Fi notification delay issue that 4.2.2 had. This is because Google turned off ARP offloading for those builds, but later turned it on in JSS15J & JSS15Q. It was also on in JWR66N, the leaked unofficial build that we got prior to the official release.

If Google were to build a new factory images now from JSS15Q, it would have ARP offloading on, and Wi-Fi notification delays fixed. The change is only to an .ini file and the drivers are the same, so while a fix is needed for JWR66V/JWR66Y, it's a simpler fix. If you use JSS15Q you don't have to flash any Wi-Fi fixes at all.

What does this mean for Custom ROMs?

Custom ROMs are usually synced with the latest AOSP revisions and changes. CyanogenMod's Android build is JSS15Q, and the same goes for rasbeanjelly, Carbon, and most custom ROMs. Clean or clean-ish JSS15Q AOSP builds are also available for those who still want both the newest revision and the stock experience, just check the development threads.

HELP! My screen is stuttering and/or has weird green colors and/or doesn't respond properly to touch and/or is yelling at me!

That is mostly why this thread was needed. As mentioned before, JSS15J&JSS15Q have an updated kernel with some GPU fixes. This means that your kernel MUST match your ROM for the issue to go away. There are workarounds, such as disabling hardware overlays, but that is not really a solution. No hardware overlays = reduced performance and possibly other issues.

The basic rule is this:

If you use JWR66V/JWR66Y, either stay with its stock kernel, or MAKE SURE the custom kernel you flash was based on JWR sources.

If you use JSS15J/JSS15Q, either stay with its stock kernel, or MAKE SURE the custom kernel you flash was based on JSS sources.

This is of course a headache for kernel developers, as they need to either drop support for one version, or release two versions each time. Many kernel developers are already offering two version of their kernels - one for JWR-based builds and one for JSS-builds.

This means that if you use the AOSP build or most custom ROMs, you will have the screen issues if you use JWR-based kernels.

So there you have it. Unless some other solution is found, there will have to be 2 kernels - one for each build.